PyGI (GTK+ 3) - Threads/Nichtblockierende Oberfläche?
Verfasst: Montag 5. September 2011, 16:36
Hallo,
ich traue mich fast nicht zu fragen, da das Problem mir recht elementar zu sein scheint. Allerdings komme ich mit der PyGI (Gtk 3 mit Python) Dokumentation (oder besser gesagt deren Abwesenheit) nicht wirklich zurecht und finde auch nicht wirklich etwas dazu im Netz. (Vorneweg, ich bin Python/Gtk/GUI-Neuling, habe sonst noch etwas C/C++-Erfahrung.)
Ich habe mal versucht, mich an GTK3 mit Python3 ranzuwagen und ein kleines Tool damit gemacht:
https://github.com/pylight/P-2-Config-Tool
Das Tool benutzt den Networkmanager um Perfect-Privacy VPN-Verbindungen herzustellen. Dabei habe nun folgendes Problem:
In dieser Funktion:
Wird auf das Ende des Subprozesses (herstellen der VPN-Verbindung) gewartet mit pCon.wait(). Ich würde dieses "aktive Warten" gerne ändern, sodass die Oberfläche nicht blockiert, nach dem Beenden des Subprozesses aber ein Label geändert wird. Nun frage ich mich, wie das mit PyGI am Besten umsetzen kann. Sollte ich einen neuen Thread erstellen (falls ja, wie geht das bei PyGI?) oder eine Abfrage zur Gtk.main()-loop hinzufügen? Leider bezieht sich alles was im Netz finde dazu noch auf PyGtk, beispielsweise http://excid3.com/blog/pygtk-and-threads-part-2/. Wenn sich jemand hier mit PyGI auskennt oder weiß wo ich weitere Infos dazu finden kann, würde ich mich daher sehr über eine Antwort freuen!
Danke & Gruß
ilike
ich traue mich fast nicht zu fragen, da das Problem mir recht elementar zu sein scheint. Allerdings komme ich mit der PyGI (Gtk 3 mit Python) Dokumentation (oder besser gesagt deren Abwesenheit) nicht wirklich zurecht und finde auch nicht wirklich etwas dazu im Netz. (Vorneweg, ich bin Python/Gtk/GUI-Neuling, habe sonst noch etwas C/C++-Erfahrung.)
Ich habe mal versucht, mich an GTK3 mit Python3 ranzuwagen und ein kleines Tool damit gemacht:
https://github.com/pylight/P-2-Config-Tool
Das Tool benutzt den Networkmanager um Perfect-Privacy VPN-Verbindungen herzustellen. Dabei habe nun folgendes Problem:
In dieser Funktion:
Code: Alles auswählen
def connect_vpn(self, button):
self.stop_vpn(self)
print("Connecting to VPN...")
pCon = Popen("nmcli con up id " + mainconfig['General']['connection'], shell=True)
stat = pCon.wait()
if stat == 0:
self.infolabel.set_label("Connected to VPN")
else:
self.infolabel.set_label("Error: Couldn't connect to server!")Danke & Gruß
ilike