2017-07-02 18 views
-1

Ich fand SysTrayIcon.py, um einfach ein Systray-Symbol in Windows zu erstellen. Problem ist, es die weitere Ausführung von Code blockiert, als ein Beispiel, das ist, wie ich meine aktuelle trayicon erstellen:Systray blockiert weitere Ausführung des Codes

import _tray #This is a simple import of SysTrayIcon.py 

#Create SysTray 
def EXIT(self): None 
def DEBUG(self): print("TEST") 
def SHOW(self): print("Showing Main Window") 
HOVER = "Foo v"+version 
ICON = root+"apr.ico" 
MENUE =(('1', None, DEBUG), 
     ('2', None, SHOW), 
     ('Sub', None, (
      ('Sub 1', None, DEBUG), 
      ('Sub 2', None, DEBUG),))) 

_tray.SysTrayIcon(ICON, HOVER, MENUE, on_quit=EXIT, default_menu_index=1) 

wenn ich jetzt können Sie diesen Code hinzufügen, sagen:

print("This get's executed after the Trayicon is quit.") 

zu der andere Code wird nicht ausgeführt, bis ich das Trayicon beende, wie kann ich dieses Verhalten vermeiden/beheben?

Antwort

1

Sie können Threads verwenden, um den WIN32-API-Kontext von Ihrer App-Logik zu trennen. Zum Beispiel, wenn Sie den direkten Aufruf ersetzen mit:

import threading 

def run_systray(icon, hover, menu, **options): 
    _tray.SysTrayIcon(icon, hover, menu, **options) 

thread = threading.Thread(target=run_systray, 
          args=(ICON, HOVER, MENUE), 
          kwargs={"on_quit": EXIT, "default_menu_index": 1}) 
thread.start() 

print("This gets executed immediately...") 

# you can do whatever you want here 

# in the end, lets cleanly handle the thread closing: 
thread.join() 

print("This gets executed only after systray exit...") 

die SysTrayIcon Klasse glücklich mit WIN32 API plaudern, ohne den Rest des Codes blockiert, bis Sie sich entscheiden, den Faden wieder auf das Haupt eines beizutreten.

+0

Genau das, was ich wollte, vielen Dank! – Lyux