在python中使用tkinter时的新窗口

在python中使用tkinter时的新窗口,python,tkinter,Python,Tkinter,我正在创建一个游戏,让用户选择角色的颜色,然后引导他们穿过迷宫。最初,我让用户输入他们的角色名称和他们希望他们去的方向,但将输入更改为使用tkinter的箭头键。现在我遇到了一个问题,因为tkinter为其输入打开了一个新窗口 import view,datetime,Tkinter as tk def main(): global root if __name__ == "__main__": view.root.update() command = ra

我正在创建一个游戏,让用户选择角色的颜色,然后引导他们穿过迷宫。最初,我让用户输入他们的角色名称和他们希望他们去的方向,但将输入更改为使用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()

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

每次你这么做

root = tk.Tk()
...
root.mainloop()
您正在创建一个全新的窗口。当然,当您在这个新窗口上使用bind_all时,这个新窗口就是接收输入的窗口。我真的不知道你想做什么,但很明显,这就是为什么你看到你看到的行为

大多数情况下,您只需要一个根-这就是为什么它被称为根!似乎应该在view.root实例上使用bind_all,而不是在这个新根上


另外,作为旁注,代码中的控制流非常奇怪。为什么if uuuu name uuuu=='\uuuuuuu main\uuuuuu'在主函数中?通常情况下,这将位于模块的顶层,并将调用main本身。

每次执行此操作时

root = tk.Tk()
...
root.mainloop()
您正在创建一个全新的窗口。当然,当您在这个新窗口上使用bind_all时,这个新窗口就是接收输入的窗口。我真的不知道你想做什么,但很明显,这就是为什么你看到你看到的行为

大多数情况下,您只需要一个根-这就是为什么它被称为根!似乎应该在view.root实例上使用bind_all,而不是在这个新根上

另外,作为旁注,代码中的控制流非常奇怪。为什么if uuuu name uuuu=='\uuuuuuu main\uuuuuu'在主函数中?通常情况下,这将位于模块的顶层,并将调用main本身。

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

在正确时检查是否需要:

关于

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

在正确时检查是否需要:


关于

我不确定这是否是问题所在,但主函数中while循环的目的是什么?事实上,现在我想起来了,我很确定这就是问题所在。当你用鼠标关闭游戏窗口时会发生什么?我把while循环作为一个无限循环。我把它拿出来,它仍然做同样的事情。当我在我的原始程序中提示用户输入角色和他们希望他们去的方向,以便他们可以在游戏中移动时,我就有了它。当我切换到箭头键时,它变得不必要了。当我开始游戏时,它会打开我想要的实际窗口,显示角色和迷宫,但也会打开另一个较小的窗口,我必须在其中单击以进行角色移动。当我关闭辅助窗口时,出现以下错误:TclError:无法调用wm命令:应用程序已被销毁行root.mainloop阻塞,直到应用程序被销毁。第二个窗口的代码在哪里?我不确定这是否是问题所在,但主函数中while循环的目的是什么?事实上,现在我想起来了,我很确定这就是问题所在。当你用鼠标关闭游戏窗口时会发生什么?我把while循环作为一个无限循环。我把它拿出来,它仍然做同样的事情。当我在我的原始程序中提示用户输入角色和他们希望他们去的方向,以便他们可以在游戏中移动时,我就有了它。当我切换到箭头键时,它变得不必要了。当我开始游戏时,它会打开我想要的实际窗口,显示角色和迷宫,但也会打开另一个较小的窗口,我必须在其中单击以进行角色移动。当我关闭辅助窗口时,出现以下错误:TclError:无法调用wm命令:应用程序已被销毁行root.mainloop阻塞,直到应用程序被销毁。你的第二个窗口的代码在哪里?我在那里做了很多错事,谢谢你的帮助。我已经获得了使用箭头键的代码,并使用了该根,而不是我应该使用的view.root。我上面的16行现在变成了6行。再次感谢。我做了很多错事,谢谢你的帮助。我已经获得了使用箭头键的代码,并使用了该根,而不是我应该使用的view.root。我上面的16行现在变成了6行。再次感谢。