私は、基本的なWebサーバーを起動し、正常に動作する特定の入力に応答するPythonスクリプトを持っています。私はまた、Windowsのシステムトレイアイコンが働いている(icoファイルを表示している) - しかし、現時点ではスクリプトはシステムアイコンを表示する時点でブロックされているようだ。Python - HTTPサーバーを起動し、Windowsのシステムトレイを設定する
私はちょうどスクリプトの実行中に表示されているシステムトレイのアイコンを聞いているpython HTTPサーバーを持っています。これは既に隠されたpythonウィンドウです。何らかの理由で失敗した場合は知りたいのですが。
2つのスレッドを個別に開始する必要はありますか?またはこれを行うためのよりよい方法がありますか?
thread = threading.Thread(target = server.serve_forever())
しかしその後、サーバ起動ピースでブロックなし:
hover_text = "My Tray Icon Text"
def hello(sysTrayIcon): print "Hello World."
def simon(sysTrayIcon): print "Hello Simon."
def switch_icon(sysTrayIcon):
pass
menu_options = (('Say Hello', None, hello),
('Switch Icon', None, switch_icon),
('A sub-menu', None, (('Say Hello to Simon', None, simon),
('Switch Icon', None, switch_icon),
))
)
def bye(sysTrayIcon):
print ("Server stopped by user")
sys.exit()
# server.shutdown()
print("setting system tray icon")
SysTrayIcon("hazard.ico", hover_text, menu_options, on_quit=bye, default_menu_index=1)
print("starting server")
#local only
#server = HTTPServer(('localhost', 9006), GetHandler)
#listen on all interfaces
server = HTTPServer(('0.0.0.0', 9006), GetHandler)
#print 'Starting server, use to stop'
server.serve_forever()
は、私はこのような設定システムトレイアイコンの前にサーバーの開始を移動しようとした。ここに私の元のコード(抜粋のみ)でしたアイコンが設定されます。
また、私はこの
from SocketServer import ThreadingMixIn
class ThreadingServer(ThreadingMixIn, HTTPServer):
pass
srvr = ThreadingServer(('0.0.0.0', 9006), GetHandler)
srvr.serve_forever()
reference を試みたが、サーバーの作品でそれはまだブロック。
多分マルチスレッドではなくマルチプロセッシングを使用するべきでしょうか?スクリプトはかなり小さいです&簡単です。
ご回答ありがとうございます。申し訳ありませんが、トレーアイコンコードの参照リンクは次のとおりです。http://www.brunningonline.net/simon/blog/archives/SysTrayIcon.py.html 私はすでに関数への参照を使用していますが、まだmyThread1ではブロックしています。start() 私は引き続きこのことを試して、何ができるかを見ていきます。 はい、sysを心配する必要はありません。exitはプレースホルダだけでした。 ;-) – TheDavil
私はあなたの2番目の編集も試してみました。彼らは何らかの理由でブロックします。私はこれについてすべて間違っていると感じているが、すぐにそれを把握するだろう – TheDavil
私はPython Win32 APIの経験がないが、いくつかのGUIフレームワークではいくつかの操作にメインスレッドを使う必要がある。あなたはそのようなトリックを見つけるかもしれません。一般に、ブロッキングコールを検出してスレッドで開始すると、メインスレッドはブロックされません(スレッドがビジーループでないと、他のスレッドが適切に処理されなくなります)。 – farzad