【发布时间】:2021-08-29 20:46:56
【问题描述】:
我对 Tkinter Entry 有疑问。我在循环中运行程序,创建和销毁两个类实例。在初始循环中,一切正常。游戏结束后,我正在销毁 Tkinter 实例:
self.frame.destroy()
self.tk.destroy()
然后程序回到主循环:
def main():
root = Tk()
data = get_data(root)
root.mainloop()
del root
root = Tk()
main_window = Main_field(root, data)
root.mainloop()
del data, root, main_window
msg = "Play again?"
res = messagebox.askyesno("Game Over", message=msg)
if res:
del res
main()
else:
quit()
这个循环的主要对象是创建新的空类实例作为第一个实例。问题是重新启动输入框后不加载输入数字。当我调用 get() 方法时,我有一个空字符串:
class get_data():
def __init__(self, tk):
global mines_var
mines_var = tkinter.StringVar()
entry_box_mines = Entry(tk, textvariable=mines_var, width=50)
entry_box_mines.pack()
entry_box_mines.insert(0, 0)
self.width = 0
self.len_ = 0
self.mines = 0
self.tk = tk
start_game_button = Button(tk, text="Start Game", command=lambda: [self.get_attributes()]).pack()
def get_attributes(self):
res = self.validate(len_var.get(), width_var.get(), mines_var.get())
if res == "OK":
self.tk.destroy()
else:
messagebox.showinfo(message=res)
我在哪里犯错了?
【问题讨论】:
-
如果您可以将此代码缩减为 minimal reproducible example,将会有所帮助。例如,我们是否真的需要三个条目小部件,或者是否可以只用一个来说明问题。
-
另外,请确保您知道如何使用类。大多数时候你不应该在类中使用全局变量。
-
@BryanOakley 我把它们都加了,因为我不确定哪一个是这里的问题
-
所以,您刚刚证明您只需要一个条目,因此您可以简化示例。
-
您似乎也缺乏基础知识,这意味着您应该首先学习这些,例如:
start_game_button = Button(tk, text="Start Game", command=lambda: [self.get_attributes()]).pack()可以而且实际上应该(仍然只是建议)简化为:Button(tk, text="Start Game", command=self.get_attributes).pack()
标签: python tkinter tkinter-entry