我遇到了这段代码无法解决的问题。我无法真正描述措辞中的问题,但在代码中,window.mainloop()
下的剩余代码将不会按需要运行,除非关闭主窗口(gui),这是有问题的。当def计算下的所有代码都已完全执行时,我希望能够print(t.test)
。我在技术上可以通过删除window.mainloop()
来做到这一点但是这将在我收集输入之前运行代码,这是至关重要的。我需要保持编码结构与下面所示的相同。
import tkinter
class Test:
def __init__(self):
self.test = False
def calculate(window, userinput, t):
test = userinput.get()
print(test)
window.destroy()
t.test = True
def main():
t = Test()
gui = tkinter.Tk()
gui.title("example window")
gui.geometry("400x400")
userinput = tkinter.StringVar()
window = tkinter.Toplevel()
window.title("Entry")
tkinter.Message(window, text="Label", width="200").pack()
tkinter.Entry(window, width=30, textvariable=userinput).pack()
tkinter.Button(window, text="ok", command=lambda: calculate(window, userinput, t)).pack()
window.mainloop()
print(t.test)
gui.mainloop()
main()
修改
通过将print(t.test)
置于其自己定义的函数下,然后在最后一行的def calculate(userinput, window, t)
下调用它,我似乎能够使其行为方式相同并保持相同的结构。我测试了这个,但它导致主窗口冻结。
答案 0 :(得分:0)
tkinter的工作方式是你:
你不应该多次调用mainloop,并且在调用mainloop之后你不应该有更多的代码。
如果您想在调用mainloop后运行某些内容,请使用after
进行安排:
...
gui.after(1, do_something)
gui.mainloop()
after
计划的任何内容都将在mainloop启动后运行。