我已经制作了一个简单的计算器,其中包含1,2,3等按钮。但是我无法将这些按钮文本(如1或2等)放到计算器屏幕上。 如果你们给我一些提示,那将是非常有帮助的。
from tkinter import *
root = Tk()
buttons = '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '+', '-'
def calc(value):
res = num.get()
res = res + " " + value
res = str(eval(res))
num.set(res)
num = StringVar()
rows = 1
col = 0
ent = Entry(root, textvariable = num, background = "#D0F3F5", border = 2, width = 50)
ent.bind('<FocusOut>')
ent.grid(row = 0 , column = 0, columnspan = 4, ipadx = 5, ipady = 5)
Button(root, text = '=', width = 45, command = calc).grid(column = 0, row = 5, columnspan = 4)
for button in buttons:
button = Button(root,width = 10, text = button, command = lambda: calc(button))
#button.bind('<Button-1>', lambda e: screen(button))
button.grid(row = rows, column = col, sticky = "W E")
button['relief']="groove"
col = col + 1
if col == 4:
rows = rows + 1
col = 0
if rows > 6:
break
root.mainloop()
答案 0 :(得分:0)
这里有几个问题。
1)变量button
用于两个不同的目的,使其中一个覆盖另一个目的。您需要重命名其中一个。
2)当using lambdas with parameters in for loops时,要获取该参数的当前值,您需要显式写入该值。
3)您没有将任何参数传递给等号按钮命令。
4)要进行计算,您需要检查按下的按钮是否为=
。如果没有,你不应该尝试计算任何东西。
将所有这些应用到您的代码中会产生:
def calc(value):
res = num.get()
res = res + value
if value == "=":
res = str(eval(res[:-1])) #to exclude equal sign itself
num.set(res)
#equal sign button
Button(root, text = '=', width = 45, command = lambda: calc("=")).grid(...)
#for loop and renaming a variable
for x in buttons:
button = Button(root,width = 10, text = x, command = lambda x=x: calc(x))