python---计算器界面以及功能

  1. 代码:

import tkinter as tk
from tkinter import *
root = Tk()
root.title("calculate")
result_num = tk.StringVar()
result_num.set('') #Tkinter中,StringVar 是一个特殊的变量类,它用于与Tkinter的某些部件(如标签Label、条目Entry等)的文本属性进行双向绑定。
                    # 这意味着当StringVar的值改变时,与之关联的部件的文本也会自动更新,同样地,如果部件的文本被用户或其他方式更改,StringVar的值也会相应更新。
tk.Label(root,
         textvariable=result_num,  height=2,
         width=20).grid(row=1, column=1, columnspan=4)
b1 = tk.Button(root, text="C",width=10,height=2,command=lambda :clear()).grid(row=2)
b2 = Button(root, text="DEL",width=10,height=2,command=lambda :back()).grid(row=2,column=1)
b3 = Button(root, text="BCK",width=10,height=2,command=lambda :back()).grid(row=2,column=2)
b4 = Button(root, text="/",width=10,height=2,command=lambda: button('/')).grid(row=2,column=3)
b5 = Button(root, text="7",width=10,height=2,command=lambda: button('7')).grid(row=3,column=0)
b6 = Button(root, text="8",width=10,height=2,command=lambda: button('8')).grid(row=3,column=1)
b8 = Button(root, text="9",width=10,height=2,command=lambda: button('9')).grid(row=3,column=2)
b9 = Button(root, text="*",width=10,height=2,command=lambda: button('*')).grid(row=3,column=3)
b10 = Button(root, text="4",width=10,height=2,command=lambda: button('4')).grid(row=4,column=0)
b11 = Button(root, text="5",width=10,height=2,command=lambda: button('5')).grid(row=4,column=1)
b12 = Button(root, text="6",width=10,height=2,command=lambda: button('6')).grid(row=4,column=2)
b13 = Button(root, text="-",width=10,height=2,command=lambda: button('-')).grid(row=4,column=3)
b14 = Button(root, text="1",width=10,height=2,command=lambda: button('1')).grid(row=5,column=0)
b15 = Button(root, text="2",width=10,height=2,command=lambda: button('2')).grid(row=5,column=1)
b16 = Button(root, text="3",width=10,height=2,command=lambda: button('3')).grid(row=5,column=2)
b17 = Button(root, text="+",width=10,height=2,command=lambda: button('+')).grid(row=5,column=3)
b18 = Button(root, text="0",width=10,height=2,command=lambda: button('0')).grid(row=6,column=0)
b19 = Button(root, text=".",width=10,height=2,command=lambda: button('.')).grid(row=6,column=1)
b20 = Button(root, text="=",width=22,height=2,command=lambda :calculation()).grid(row=6,column=2,columnspan=2)
def button(x):
    print('X:\t', x)
    result_num.set(result_num.get() + x)#将当前从按钮获取的值 x 附加(拼接)到现有字符串的末尾。
def calculation():
    c = result_num.get()
    result = eval(c) #使用Pythoneval函数来计算该表达式的值
    result_num.set(str(result)) #将计算结果转换为字符串,并使用result_num.set()方法更新StringVar的值,这将自动更新与result_num关联的Tkinter部件(如Label)的文本。
def clear():
    result_num.set("")
def back():
    b=result_num.get()
    if b:
        result_num.set(b[:-1])
root.mainloop()

  1. 截图:

  1. 分析:

在Tkinter中,StringVar 是一个特殊的变量类,它用于与Tkinter的某些部件(如标签Label、条目Entry等)的文本属性进行双向绑定。这意味着当StringVar的值改变时,与之关联的部件的文本也会自动更新,同样地,如果部件的文本被用户或其他方式更改,StringVar的值也会相应更新。

result_num = tk.StringVar(): 这一行创建了一个新的StringVar对象,并将其赋值给变量result_num。

result_num.set(''): 这一行调用StringVar对象的set方法,并将一个空字符串('')作为参数传递给它。这会将StringVar的当前值设置为空字符串。之后,如果你将这个StringVar对象与某个Tkinter部件(如Label)的textvariable属性关联起来

calculation函数中,你正在从result_num StringVar中获取当前的字符串值(这通常代表用户输入的数学表达式),然后使用Python的eval函数来计算该表达式的值。之后,你将计算结果转换为字符串,并使用result_num.set()方法更新StringVar的值,这将自动更新与result_num关联的Tkinter部件(如Label)的文本。

def button(x):
    print('X:\t', x)
    result_num.set(result_num.get() + x)

定义了一个名为 button 的函数,它接受一个参数 x。'X:\t' 是一个字符串,其中 \t 是一个制表符(tab),用于在输出中插入一个制表位,以便清晰地显示 x 的值。+ x:将当前从按钮获取的值 x 附加(拼接)到现有字符串的末尾。

result_num.set(...):使用更新后的字符串值来设置 StringVar 对象 result_num 的值。这会自动更新与 result_num 关联的 Tkinter 部件(如 Entry 控件)的显示内容。

Clear方法将lambl设置为空

Back方法将lambl设置为字符串的上一位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值