Pyqt5 Button text abfragen im worker Thread

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
bachatero18
User
Beiträge: 43
Registriert: Montag 12. August 2019, 13:57

Moin zusammen,
ich hänge seit ein paar Stunden daran, dass ich im Worker Thread eines Programm (GUI ist mit pyqt5 erstellt) den Text eines Buttons abfragen muss.

Alles andere so label aktualisierungen etc. funktioniert super mit slots und signalen. Nur in diesem Fall eben nicht.
Ich versuch mal ein kleines Beispiel zu machen damit man das Problem versteht

Code: Alles auswählen

while not self.interrupt:  # run as long as interrupt is false
	if self.ui.Button_StartSimulation.text() != self.initial_text_button_startsimulation:  # if the simulation is active
		print("simulation active")
Problem hier ist natürlich, dass diese Vorgehensweise nicht thread sicher ist, aber wenn ich jetzt slot und signale verwende bekomm ich kein return und dem entsprechend geht er nie in die True fall von if rein bzw. wartet er ja eh nicht bis die aufgabe erledigt ist.
Leider ist es hier auch nicht sinnvoll den text bei abfrage auf self.button_text oder in eine queue zu schreiben, da es in diesem Fall den eig. zweck des Programm aushebeln würde (wäre jetzt zu viel um den background zu erklären)

Also hab ihr eine Idee wie ich das Thread sicher hinbekomme und ich auch effektiv an dieser stelle zu diesem Zeitpunkt den text des Buttons bekommen?

gruß bachatero18
Benutzeravatar
__blackjack__
User
Beiträge: 13689
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@bachatero18: Man sollte so gut wie nie den Text eines Button auslesen müssen. Du hast da offenbar die Programmlogik nicht sauber von der GUI getrennt. Ob die Simulation aktiv ist fragt man die Simulation, nicht die GUI.
„Incorrect documentation is often worse than no documentation.“ — Bertrand Meyer
bachatero18
User
Beiträge: 43
Registriert: Montag 12. August 2019, 13:57

Ups ja hast recht ziemlich dumm hab jetzt beim Button click event einfach eine self.variable erstellst die auf True oder False gesetzt wird jenachdem ob diese simulaton aktive ist oder nicht und fertig. Das kommt davon wenn man den wald vor lauter Bäumen nicht mehr sieht
Antworten