PyQt5 - QWidget ständig updaten

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
telefonnummer
User
Beiträge: 7
Registriert: Montag 30. Januar 2017, 18:38

Montag 30. Januar 2017, 18:43

Guten Abend,

ich benötige Hilfe bei einem aktuellen Problem. Ich möchte ein QWidget beim Aufrufen einer Funktion updaten ohne das die GUI blockiert wird. Und zwar befindet sich in meinem QWidget ein QLabel das eine QPixmap anzeigt. Ein Funktionsaufruf bearbeitet die Pixel in der QPixmap und weißt dem QLabel die geänderte Pixmap erneut zu, danach wird ein QLabel.update() aufgerufen. Ich verstehe auch nicht, in wiefern der Aufruf "QApplication.exec_()" eine Rolle spielt, jedenfalls scheint er die GUI für zukünftige Updates immun zu machen, man benötigt den Befehl allerdings, damit das QLabel überhaupt etwas anzeigt bzw. das Fenster nicht sofort wieder zu geht. Leider finde ich im Internet keine (für mich verständlichen) Beispiele. Wäre nett, wenn mir da jemand weiterhelfen könnte.
BlackJack

Montag 30. Januar 2017, 20:32

@telefonnummer: Du willst etwas machen was so eigentlich nicht unterstützt wird — der Qt-Hauptschleife die Kontrolle zu entziehen wann was mit der GUI passiert.

Wie lange läuft die Funktion denn? Wenn die zur Qt-Hauptschleife zurückkehrt, dann wird die GUI doch aktualisiert. Und zurückkehren sollte sie. Wenn sie zu lange läuft und die GUI damit blockiert, könntest Du einen `QTimer` verwenden um eine Methode aufzurufen die bei jedem Aufruf einen Teil der Arbeit verrichtet.

Ansonsten müsstest Du auf nebenläufige Programmierung mittels Threads (QThread in diesem Fall) zurückgreifen, was nicht ganz einfach ist, und neben Threads im Allgemeinen auch noch die Feinheiten die Qt mitbringt, beinhaltet.
Axel-Erfurt
User
Beiträge: 20
Registriert: Mittwoch 2. Oktober 2013, 22:15

Montag 30. Januar 2017, 22:50

BlackJack hat geschrieben:Du willst etwas machen was so eigentlich nicht unterstützt wird — der Qt-Hauptschleife die Kontrolle zu entziehen wann was mit der GUI passiert.
Meinst Du damit QLabel.update() oder QApplication.exec_() ?
BlackJack

Montag 30. Januar 2017, 23:12

@Axel-Erfurt: Ich meine insgesamt die Beschreibung des Problems.
Antworten