在python中使用tkinter时的新窗口

时间:2012-05-07 01:13:03

标签: python tkinter

我正在创建一个游戏供用户选择字符颜色并继续引导他们穿过迷宫。最初我让用户输入了他们角色的名字和他们想要的方向,但更改了输入以使用带有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()

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

2 个答案:

答案 0 :(得分:3)

每次你这样做......

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

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

大多数时候,你只需要一个root - 这就是它被称为“root”的原因!您似乎应该在bind_all实例上使用view.root,而不是在此新根目录上使用。{/ p>

另外,作为旁注,控制流程在您的代码中非常奇怪。为什么if __name__ == '__main__' 位于 main函数中?通常情况下,它位于模块的顶层,并且调用 main本身。

答案 1 :(得分:1)

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

检查while True:

的必要性

此致