【发布时间】:2020-03-22 06:39:17
【问题描述】:
我正在尝试在 Tkinter 中制作一个基本的计算器,但我遇到了文本字段和数字按钮的问题。我希望按下的按钮显示在Entry() 窗口中,但我不知道如何处理StringVar 实例。它一直告诉我,StringVar 没有 .extend() 属性,即使它在不同的帖子中使用过(可能是旧版本?)。现在,我的按钮所能做的就是.set() 输入“0”,仅此而已。
基本上,我希望按下按钮来动态更新我的 StringVar,就像从左到右扩展字符串一样。最理想的情况是,我可以同时使用按钮和直接文本输入来更新StringVar(这就是跟踪的用途吗?)。 StringVar 甚至是正确的类吗?我对 GUI 编程很陌生,所以我不知道该使用什么。
import tkinter as tk
def N0(text):
text.set('0')
root = tk.Tk()
formula = tk.StringVar()
Num_bw = 0.08
Num_bh = 0.15
Num_bx = 0.01
Num_by = 0.01
Num_bx0 = 0
Num_by0 = 0
Num_bw_tol = 0.004
Num_bh_tol = 0.01
width, height = root.winfo_screenwidth(), root.winfo_screenheight()
width *= 0.5
height *= 0.5
r = width/height
root.geometry('%dx%d+0+0'%(width,height))
canvas = tk.Canvas(root,height=height,width=width,bg='#80dfff')
canvas.pack()
frame1 = tk.Frame(canvas,bg='#f2f2f2')
frame2 = tk.Frame(canvas,bg='#f2f2f2')
frame1.place(relx=0.03,rely=0.05,relwidth=0.94,relheight=0.2)
frame2.place(relx=0.07,rely=0.27,relwidth=0.86,relheight=0.68)
TextField = tk.Entry(frame1,bg='white',
textvariable=formula,
font=("Comic Sans MS", 15))
TextField.place(relx=0.01,rely=0.05,relwidth=0.98,relheight=0.9)
Num_0 = tk.Button(frame2,text='0',bg='#e6ffff',command=lambda:N0(formula))
Num_0.place(relx=Num_bw_tol*1 + Num_bx0 + Num_bw*1,
rely=Num_bh_tol*5 + Num_by0 + Num_bh*5,
relwidth=Num_bw,relheight=Num_bh)
root.mainloop()
【问题讨论】:
-
“即使它在不同的帖子中使用过”。听起来不错。你能提供那个帖子的链接吗?
-
stackoverflow.com/questions/16373887/… Aaaaa 我需要眼镜。它适用于条目...
-
@J.Doe 了解The Variable Classes (StringVar)