3

質問

同じスクリプトでTkintermainloopと無限サーバーループを同時に実行する方法は?

バックグラウンド

Tkinter ( Python 2.7.3 ) で GUI サーバーを作成中です。これまでのところ、GUI は正しく動作し、サーバーも正しく動作しますが、2 つの統合に問題があります私の知る限り(間違っていたら訂正してください)、サーバーは新しいユーザーを受け入れるために無限ループで実行する必要があります。残念ながら、GUI にも無限ループが必要です。両方のループを同時に実行する方法を考えています。

私の現在のメインループ関数は次のようになります(sソケットオブジェクトです):

def mainloop(s):
    while True:
        channel, addr = s.accept()
        print "Connected with", addr

サーバーを実行し続けるためには明らかに必要です(私はそう思います)。ただし、問題は、このループが私の前に来るためmainloop、問題があることです。逆にすると、サーバーは開かれません。

完全なコード

私のサーバー コードはここにあり、私のクライアントはここにあります。

ありがとう!

4

3 に答える 3

4

スレッド モジュールを使用して、サーバーのメインループを新しいスレッドで開きます。

交換

mainloop(s)

thread.start_new_thread(mainloop, (s,))

次に、root.mainloop() を呼び出して Tkinter を実行できます。


アップデート

以下の A. Rodas のコメントによるthreadingと、Python 3 と互換性のある新しいモジュールを使用することをお勧めします。

交換できるように

mainloop(s)

threading.Thread(target=mainloop, args=(s,)).start()
于 2013-04-02T02:28:58.000 に答える
3

Twisted http://twistedmatrix.com/trac/を使用することをお勧めします。

Tk ループをリアクター ループ (ネットワーキングを行う) http://twistedmatrix.com/documents/8.2.0/api/twisted.internet.tksupport.htmlに統合し、プロトコルを簡単に構築できます....

于 2013-04-02T04:17:22.757 に答える
0

それらを別々のスレッドで実行します。詳細については、threading モジュールのドキュメントを参照してください。

于 2013-04-02T02:33:31.457 に答える