Seite 1 von 1

QT Farbe kurz ändern

Verfasst: Donnerstag 13. Oktober 2016, 13:50
von tom.rudnick
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

Re: QT Farbe kurz ändern

Verfasst: Donnerstag 13. Oktober 2016, 14:03
von Sirius3
@tom.rudnick: sleep hat in einem GUI-Programm nichts verloren, da solange eine Methode abgearbeitet wird, die ganze GUI eingefroren ist.

Re: QT Farbe kurz ändern

Verfasst: Donnerstag 13. Oktober 2016, 14:06
von tom.rudnick
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?

Re: QT Farbe kurz ändern

Verfasst: Donnerstag 13. Oktober 2016, 15:02
von BlackJack
`QTimer.singleShot()` könnte man verwenden.