- 代码:
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) #使用Python的eval函数来计算该表达式的值
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()
- 截图:
- 分析:
在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设置为字符串的上一位
标签:python,height,---,num,grid,result,计算器,root,row From: https://blog.csdn.net/2302_81279069/article/details/139869754