问题描述
所以我试图制作一个像窗口一样打开的python计算器,但是在计算之前,我试图让它显示我单击的数字,一切正常,追加,列表,一切正常,直到它必须显示实际数字,并在其中显示什么,例如,我试图将标签更改为“ hi”,以查看列表是否存在问题,但是什么都没有显示,可以有人帮助我获取要在“结果”区域中显示的数字吗?这是我的代码:
root = tk.Tk()
color = '#263D42'
numbers = []
Background = tk.Canvas(root,height=600,width=601,bg=color)
Background.pack()
resultBack = tk.Canvas(root,height=150,width=400,bg="#E4E0E0")
resultBack.place(x=50,y=1)
root.title('Calculator')
root.iconphoto(False,tk.PhotoImage(file='plus.ico'))
root.resizable(width = False,height = False)
root.geometry("500x600")
for number in numbers:
label = tk.Label(root,text="hi",bg="black")
label.pack()
frame = tk.Frame(root,bg="white")
frame.place(relwidth=0.8,relheight=0.8,relx=0.1,rely=0.1) #frame
def addOne():
for widget in frame.winfo_children():
widget.destroy()
numbers.append('1')
for number in numbers:
print(number)
label = tk.Label(root,text=number,bg="black")
label.pack()
print(numbers)
one = tk.Button(root,text="1",padx=10,pady=5,fg="#000000",bg="#ffffff",command=addOne)
one.place(x=30,y=30)
root.mainloop()
解决方法
您不应该那样创建和删除标签;您可以更改它们。 也许尝试这样的事情:
import tkinter as tk
root = tk.Tk()
numbers = []
root.title('Calculator')
root.resizable(width = False,height = False)
root.geometry("500x600")
label_text = tk.StringVar()
label_text.set('hi')
label = tk.Label(root,textvariable=label_text)
label.pack()
frame = tk.Frame(root,bg="white")
frame.place(relwidth=0.8,relheight=0.8,relx=0.1,rely=0.1) #frame
def addOne():
numbers.append(1)
work = ""
for i in numbers:
work+=str(i)
label_text.set(work)
one = tk.Button(root,text="1",padx=10,pady=5,fg="#000000",bg="#ffffff",command=addOne)
one.place(x=30,y=30)
root.mainloop()
那应该显示数字。 StringVars是您做这类事情的朋友。当您更新它们时,tk会自动更新它们所附加的小部件。 从这里开始,您可能希望将其移动以使其看起来更好等,并且您可能不想为每个按钮添加方法(addTwo,addThree,addFour等)。如果您需要更多帮助,请告诉我们。