Seite 1 von 2

Re: Funktion einer Klasse wird nicht aufgerufen, obwohl sie funzt

Verfasst: Montag 13. Mai 2019, 19:07
von xXSkyWalkerXx1
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...?^^

Re: Funktion einer Klasse wird nicht aufgerufen, obwohl sie funzt

Verfasst: Montag 13. Mai 2019, 19:13
von __deets__
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?

Re: Funktion einer Klasse wird nicht aufgerufen, obwohl sie funzt

Verfasst: Montag 13. Mai 2019, 19:23
von xXSkyWalkerXx1
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.

Re: Funktion einer Klasse wird nicht aufgerufen, obwohl sie funzt

Verfasst: Montag 13. Mai 2019, 19:32
von __deets__
Das kann man mit Threads machen. Oder die Aufgaben in kleine Happen teilen und über QTimer triggern.

Re: Funktion einer Klasse wird nicht aufgerufen, obwohl sie funzt

Verfasst: Montag 13. Mai 2019, 21:33
von xXSkyWalkerXx1
Okay, danke - schaue ich mir morgen Mal an.

Re: Funktion einer Klasse wird nicht aufgerufen, obwohl sie funzt

Verfasst: Dienstag 9. Juli 2019, 09:47
von xXSkyWalkerXx1
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:

Code: Alles auswählen

Python-Forum | www.python-forum.de
Nun könnten allerdings tausende Programme (also Name+Url - jedes Programm durch neue Zeile trennbar) da stehen, dafür habe ich folgenden Code:

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)
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.

Re: Funktion einer Klasse wird nicht aufgerufen, obwohl sie funzt

Verfasst: Dienstag 9. Juli 2019, 09:51
von __deets__
Und weil ich nicht moechte, das ein einzelner Thread zu einer thematisch inkongruenten Ansammlung von Nachrichten verkommt, werde ich die Frage hier nicht beantworten ;)

Re: Funktion einer Klasse wird nicht aufgerufen, obwohl sie funzt

Verfasst: Mittwoch 18. September 2019, 19:25
von xXSkyWalkerXx1
Da es hier ja um das Nicht-Erscheinen eines Fenster geht, poste ich hier erneut mein Anliegen.

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
                                                     )
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

Re: Funktion einer Klasse wird nicht aufgerufen, obwohl sie funzt

Verfasst: Donnerstag 19. September 2019, 16:32
von xXSkyWalkerXx1
Iwer weiß es doch? ^^

Re: Funktion einer Klasse wird nicht aufgerufen, obwohl sie funzt

Verfasst: Donnerstag 19. September 2019, 20:35
von Sirius3
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`?