2012-05-07 35 views
1

我正在爲用戶創建一個遊戲來選擇字符顏色並繼續引導他們穿過迷宮。最初我讓用戶輸入他們的角色名稱和他們希望他們走的方向,但改變了輸入以使用tkinter的箭頭鍵。現在我遇到了一個問題,因爲tkinter會爲其輸入打開一個新窗口。在python中使用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

的必要性,我不知道這是否是問題,但什麼是你的主要功能while循環的目的是什麼? –

+0

其實現在我想到了,我很確定這就是問題所在。當你用鼠標關閉遊戲窗口時會發生什麼? –

+0

我把while循環當成一個無限循環。我把它拿出來,它仍然做同樣的事情。當我提示用戶輸入角色和他們希望他們走的方向時,我在原始程序中使用了它,以便他們可以在遊戲中移動。當我改變到箭頭鍵時變得沒有必要。 – user1378701

回答

3

你這樣做每次...

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

你創建一個全新的窗口。所以當然當你在這個新窗口上使用bind_all時,那個新窗口就是接收輸入的窗口。我無法確切知道你想要做什麼,但很明顯,這就是你看到你所看到的行爲的原因。

大多數時候,你只需要一個root - 這就是爲什麼它被稱爲「根」!看來你應該在view.root實例上使用bind_all,而不是在這個新的根上。

另外,作爲一個附註,控制流程在你的代碼中真的很奇怪。爲什麼if __name__ == '__main__'裏面的main函數?通常情況下,它將位於模塊的頂層,並且本身會調用main

+0

我在那裏犯了很多錯誤,謝謝你的幫助。我得到的代碼使用箭頭鍵,並使用該根,而不是view.root我應該使用。我上面的16行現在變成了6行。再次感謝。 – user1378701

1

root = tk.Tk()聲明實際上創建了一個新窗口並且root.mainloop()維護窗口的控制循環。如果您將此代碼添加到while True:中,幾個窗口將逐個打開。

檢查while True:

問候