0

我遇到了这个代码在某个时候不会执行代码的问题。我无法真正用措辞描述问题,但在代码中,window.mainloop()除非主窗口(gui)关闭,否则其余代码将不会按我的需要运行,这是有问题的。我希望能够print(t.test)在 def calculate 下的所有代码都已完全执行时。从技术上讲,我可以通过删除来做到这一点,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)在最后一行调用它 来使其行为相同并保持相同的结构。我对此进行了测试,但它导致主窗口冻结。

4

1 回答 1

0

tkinter 设计的工作方式是:

  1. 创建您的小部件
  2. 调用 mainloop(恰好一次)
  3. 窗口被破坏,程序退出

您不应多次调用 mainloop,并且在调用 mainloop 后不应有更多代码。

如果您希望在调用 mainloop 后运行某些东西,请使用以下命令对其进行调度after

...
gui.after(1, do_something)
gui.mainloop()

任何安排的事情after都将在主循环开始后运行。

于 2013-08-24T14:14:06.617 回答