【发布时间】:2021-08-06 19:28:33
【问题描述】:
我正在构建一个 Tkinter 应用程序,用户可以在其中扫描二维码,添加一些数据并生成要打印的标签。
我目前正在构建创建用户输入表单的函数,但遇到了问题。我有一个创建 6 个按钮和 3 个条目的功能。按钮应增加或减少条目中的值。所有 3 个条目的默认值都是 0。
问题是,按钮只将值设置为 1 或 -1,而条目本身并没有得到更新。
我错过了什么?这是我第一次使用 Tkinter 编程,我真的需要一些帮助......
class MainDialog:
def __init__(self, master):
self.master = master
self.frame = Frame(self.master)
self.button1 = Button(self.frame, text = 'New Window', width = 25, command = self.new_window)
self.int_e = ['box', 'bag', 'dry']
self.build_items()
self.frame.pack()
def build_items(self):
for i in range(len(self.int_e)):
self.b_inc = Button(self.frame, text='+', width=2, bg='white', relief=GROOVE, command=lambda : self.qty(i, '+'))
self.b_dec = Button(self.frame, text='-', width=2, bg='white', relief=GROOVE, command=lambda : self.qty(i, '-'))
self.e_qty = Entry(self.frame, width=4, textvariable=i)
self.b_inc.grid(row=i, column=0, pady=10)
self.e_qty.grid(row=i, column=1, pady=10)
self.b_dec.grid(row=i, column=2, pady=10)
def new_window(self):
self.newWindow = Toplevel(self.master)
self.app = QRDialog(self.newWindow)
def qty(self, variable:IntVar, method:str) -> None:
item = variable.get()
if method == "+":
item += 1
elif method == "-":
item -= 1
else:
print("Error: Invalid method given")
variable.set(item) # Tell tkinter that we want to change its value
【问题讨论】:
-
现在您正在从
IntVar中获取值,将其更改并打印出来。你永远不会告诉tkinter你改变了那个值。 -
两个问题。 №.1)
item =+ 1应该是item += 1以便将一个添加到item。 №.2) 更新item的值后,您需要调用IntVar的set()方法来更新它——但是您不能这样做,因为由于item = item.get(),它不能再被引用你一开始就这样做了。