Naja, das Problem ist (hätte ich vllt im Vorraus erwähnen sollen), dass, sobald man auf "login" (Button) drückt, das Fenster solange nicht reagiert, bis es z.b. die WhatsApp-Nachricht gesendet hat.
Ich dachte eigentlich man mache das mit "Thread" oder "Process".
Wie kann man dann sowas machen? Etwa mit der "after" Methode, von der ich so viel lese...?^^
Funktion einer Klasse wird nicht aufgerufen, obwohl sie funzt
Wenn du von der liest, dann wohl eher nicht im Zusammenhang mit Qt. Da sind das QTimer.
Man KANN das dann mit einem Thread oder Prozess machen. Man kann auch asyncio oder ähnliches verwenden. Wobei ich das generell in frage stellen würde. Was soll der Benutzer denn tun, solange der Login Vorgang läuft?
Man KANN das dann mit einem Thread oder Prozess machen. Man kann auch asyncio oder ähnliches verwenden. Wobei ich das generell in frage stellen würde. Was soll der Benutzer denn tun, solange der Login Vorgang läuft?
-
- User
- Beiträge: 379
- Registriert: Mittwoch 27. Juni 2018, 17:39
Na tun soll er nichts, das Problem ist nur, dass wenn man dann auf's Fenster klickt (sollte der Vorgang wegen schlechten Internets länger dauern) es nicht reagiert...der Benutzer soll ja nicht denken, dass das Programm abgestürzt ist.
Das Gleiche bräuchte ich für meine Belegarbeit, die ich im Leistungskurs Mathe schreibe - da soll ich ein Programm schreiben, welches die lokalen & globale Minimas und Maximas berechnet - da soll ja auch nicht währenddessen kommen: "Fenster reagiert nicht" (oder so) , sollte man Mal aus Ungeduld auf's Fenster klicken, weil es vllt lange dauert.
Das Gleiche bräuchte ich für meine Belegarbeit, die ich im Leistungskurs Mathe schreibe - da soll ich ein Programm schreiben, welches die lokalen & globale Minimas und Maximas berechnet - da soll ja auch nicht währenddessen kommen: "Fenster reagiert nicht" (oder so) , sollte man Mal aus Ungeduld auf's Fenster klicken, weil es vllt lange dauert.
Zuletzt geändert von xXSkyWalkerXx1 am Montag 13. Mai 2019, 19:32, insgesamt 1-mal geändert.
-
- User
- Beiträge: 379
- Registriert: Mittwoch 27. Juni 2018, 17:39
Okay, danke - schaue ich mir morgen Mal an.
-
- User
- Beiträge: 379
- Registriert: Mittwoch 27. Juni 2018, 17:39
Da ich nicht erneut ein Thread öffnen wollte, habe ich jetzt einfach Mal dieses ausgewählt.
Undzwar möchte ich zu einem Programmen eine dynamische Library hinzufügen, da ich aber kein Server habe ,denn 1) kein Geld ausgeben will & 2) zu faul bin mir erst ein einzurichten, habe ich es so gemacht, dass ich jedes Programm (Name+URL) auf eine Seite meiner Webseite schreibe, was z.b. so aussieht:
Nun könnten allerdings tausende Programme (also Name+Url - jedes Programm durch neue Zeile trennbar) da stehen, dafür habe ich folgenden Code:
Die Menus werden erstellt, mit Name und Url, allerdings ist auf allen Items die Url des letzten Datensatzes.
Das Warum ist mir klar, denn 'triggered.connect()' greift letztendlich nur auf 1 Variable zu.
Aber mir fällt nichts ein wie ich die Variable in der for-Schleife nach jeden Ablauf unterschiedlich erzeugen lasse.
Undzwar möchte ich zu einem Programmen eine dynamische Library hinzufügen, da ich aber kein Server habe ,denn 1) kein Geld ausgeben will & 2) zu faul bin mir erst ein einzurichten, habe ich es so gemacht, dass ich jedes Programm (Name+URL) auf eine Seite meiner Webseite schreibe, was z.b. so aussieht:
Code: Alles auswählen
Python-Forum | www.python-forum.de
Code: Alles auswählen
for programs in online_libs: #'online_libs' wäre in diesem Bsp: [Python-Forum | www.python-forum.de]
menu_item = QAction(QIcon("sgi_icon.png"),str(programs.split('|')[0]),self)
menu_item.triggered.connect(lambda: webbrowser.open(str(programs.split('|')[1])))
self.library.addAction(menu_item)
Das Warum ist mir klar, denn 'triggered.connect()' greift letztendlich nur auf 1 Variable zu.
Aber mir fällt nichts ein wie ich die Variable in der for-Schleife nach jeden Ablauf unterschiedlich erzeugen lasse.
-
- User
- Beiträge: 379
- Registriert: Mittwoch 27. Juni 2018, 17:39
Da es hier ja um das Nicht-Erscheinen eines Fenster geht, poste ich hier erneut mein Anliegen.
Undzwar habe ich 2 Codes:
Mein Ziel ist es ein Loginvorgang mit Thread zu erstellen, damit sich das Fenster dabei nicht aufhängt & der Benutzer denkt das Programm sei abgestürzt.
Der 1. Code funktioniert nicht, der 2. aber schon - sprich: der Code mit dem Thread funktioniert nicht, der ohne Thread tut es aber.
Ich verstehe nicht wieso - okay, wende Threads auch erst seit neuesten an.
Kann mir da jemand erklären, worin das Problem liegt?
Danke im Vorraus & Grüße,
xXSkyWalkerXx1
Undzwar habe ich 2 Codes:
Code: Alles auswählen
def start_thread(self,username,password,trial_version,instance):
self.LoginThread = Thread(username,password,trial_version,instance)
self.LoginThread.start()
class Thread(threading.Thread):
def __init__(self,username,password,trial_version,instance):
"""
initilialize Thread
"""
threading.Thread.__init__(self)
self.username = username
self.password = password
self.trial_version = trial_version
self.login_window = instance
def run(self):
self.login_window.close()
self.ui = Interface().main(
self.script,self.prog_version,self.script_version,
self.script_path,self.lic,self.library_list,
self.username,self.trial_version
)
Code: Alles auswählen
def start_thread(self,username,password,trial_version,instance):
self.LoginThread = Thread(username,password,trial_version,instance)
self.LoginThread.run()
class Thread():
def __init__(self,username,password,trial_version,instance):
self.username = username
self.password = password
self.trial_version = trial_version
self.login_window = instance
def run(self):
self.login_window.close()
self.ui = Interface().main(
self.script,self.prog_version,self.script_version,
self.script_path,self.lic,self.library_list,
self.username,self.trial_version
)
Der 1. Code funktioniert nicht, der 2. aber schon - sprich: der Code mit dem Thread funktioniert nicht, der ohne Thread tut es aber.
Ich verstehe nicht wieso - okay, wende Threads auch erst seit neuesten an.
Kann mir da jemand erklären, worin das Problem liegt?
Danke im Vorraus & Grüße,
xXSkyWalkerXx1
-
- User
- Beiträge: 379
- Registriert: Mittwoch 27. Juni 2018, 17:39
Iwer weiß es doch? ^^
GUIs und Threads sind eine schwierige Sache, vor allem, wenn es keine QT-Threads sind.
Die Thread-Klasse macht nichts sinnvolles und der Rest des Codes fehlt, um zu verstehen, was Du machen willst. Was ist `Interface` oder `main`?
Die Thread-Klasse macht nichts sinnvolles und der Rest des Codes fehlt, um zu verstehen, was Du machen willst. Was ist `Interface` oder `main`?