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、その新しいウィンドウが入力を受け取るウィンドウです。私はあなたが何をしようとしているのか本当にわかりませんが、これがあなたが見ている行動を見る理由であることは明らかです。

ほとんどの場合、必要なのは1つだけです。そのrootため、「ルート」と呼ばれます。この新しいルートではなくbind_all、インスタンスで使用する必要があるようです。view.root

また、補足として、制御の流れはコード内で本当に奇妙です。なぜ関数のif __name__ == '__main__' にあるのですか?main通常、それはモジュールのトップレベルにあり、それ自体を呼び出し mainます。

于 2012-05-07T01:54:01.970 に答える
1

root = tk.Tk()ステートメントは実際に新しいウィンドウを作成し、ウィンドウのroot.mainloop()制御ループを維持します。このコードをwhile True:複数のウィンドウに追加すると、1つずつ開きます。

の必要性を確認してくださいwhile True:

よろしく

于 2012-05-07T02:12:59.463 に答える