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