Funktion einer Klasse wird nicht aufgerufen, obwohl sie funzt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
xXSkyWalkerXx1
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:

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und weil ich nicht moechte, das ein einzelner Thread zu einer thematisch inkongruenten Ansammlung von Nachrichten verkommt, werde ich die Frage hier nicht beantworten ;)
xXSkyWalkerXx1
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:

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
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Iwer weiß es doch? ^^
Sirius3
User
Beiträge: 17760
Registriert: Sonntag 21. Oktober 2012, 17:20

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`?
Antworten