1

我正在为用户创建一个游戏来选择角色颜色并继续引导他们通过迷宫。最初我让用户输入他们角色的名称和他们希望他们去的方向,但将输入更改为使用 tkinter 的箭头键。现在我遇到了一个问题,因为 tkinter 为其输入打开了一个新窗口。

import view,datetime,Tkinter as tk

def main():
   global root
   if __name__ == "__main__":
      view.root.update()
      command = raw_input( "choose a player:" )
      run1( command )
      view.root.update()
      while True:
          root = tk.Tk()
          print( "Press a key (Escape key to exit):" )
          root.bind_all( '<Key>', key )
          root.mainloop()
      root.withdraw()
      root.destroy()
      view.root.destroy()

main()

这显示了我导入的内容和我的主要功能。

4

2 回答 2

3

每次你这样做...

root = tk.Tk()
...
root.mainloop()

您正在创建一个全新的窗口。所以当然,当你bind_all在这个新窗口上使用时,那个新窗口就是接收输入的窗口。我无法真正说出你想要做什么,但很明显这就是你看到你所看到的行为的原因。

大多数时候,你只想要一个root——这就是为什么它被称为“root”!似乎您应该bind_allview.root实例上使用,而不是在这个新根上使用。

另外,作为旁注,您的代码中的控制流确实很奇怪。为什么在函数if __name__ == '__main__' 里面main?通常这将在模块的顶层,并会调用 main它自己。

于 2012-05-07T01:54:01.970 回答
1

root = tk.Tk()语句实际上创建了一个新窗口并root.mainloop()维护了窗口的控制循环。如果将此代码添加到while True:几个窗口中,将一一打开。

检查必要性while True:

问候

于 2012-05-07T02:12:59.463 回答