QT Farbe kurz ändern

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
tom.rudnick
User
Beiträge: 6
Registriert: Sonntag 19. Juni 2016, 14:43

Hey,
Ich versuche momentan das bei QT sich die Farbe bei einem label ändert wenn ich einen button drücke und dann wieder zurück, jedoch funktioniert das nicht, da jedesmal wenn ich wenn ich hinter dem ändern der Farbe ein time.sleep(1) setze, ändert sich die Farbe erst nach der einen Sekunde.

Code: Alles auswählen


import time
import sys
from PyQt5 import QtWidgets, uic, QtCore, QtGui

class MeinDialog(QtWidgets.QDialog):
    def __init__(self, parent=None):
            super().__init__(parent)
            self.ui = uic.loadUi("steuerung.ui", self)
            self.key = ""
    def keyPressEvent(self, e):
        if e.key() == QtCore.Qt.Key_W:
            self.color("W")
        elif e.key() == QtCore.Qt.Key_S:
            print("pressed S")
        elif e.key() == QtCore.Qt.Key_D:
            print("pressed D")
        elif e.key() == QtCore.Qt.Key_A:
            print("pressed A")
        elif e.key() == QtCore.Qt.Key_Escape:
            self.close()

    def color(self, key):
        if key == "W":
            self.ui.W.setStyleSheet('color: red')
            time.sleep(1)
            self.ui.W.setStyleSheet('color: black')


app = QtWidgets.QApplication(sys.argv)
dialog = MeinDialog()
dialog.show()
sys.exit(app.exec_())

Was muss ich tun um die Farbe nur für eine Sekunde zu ändern?
Vieln Dank im Vorraus!
LG Tom
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@tom.rudnick: sleep hat in einem GUI-Programm nichts verloren, da solange eine Methode abgearbeitet wird, die ganze GUI eingefroren ist.
tom.rudnick
User
Beiträge: 6
Registriert: Sonntag 19. Juni 2016, 14:43

Sirius3 hat geschrieben:@tom.rudnick: sleep hat in einem GUI-Programm nichts verloren, da solange eine Methode abgearbeitet wird, die ganze GUI eingefroren ist.
Hm ok danke, wie löst man denn sonst so ein Problem?
Hat Qt irgend eine Funktion dafür?
BlackJack

`QTimer.singleShot()` könnte man verwenden.
Antworten