Visuelles Feedback beim Klicken eines Buttons

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
jcshine
User
Beiträge: 4
Registriert: Freitag 30. Juli 2021, 12:19

Freitag 30. Juli 2021, 12:28

Ich habe einen Button, welcher selbstverständlich eine Funktion zugeordnet ist, diese Funktion wird auch erfolgreich ausgeführt, nur leider kriegt der Anwender davon (erstmal) nichts mit, der Button hat nämlich kein Visuelles Feedback beim Klicken, meine Frage daher:
Wie kriege ich es hin, dass der Button sich bei klicken bewegt, kurz eingedrückt wird oder ähnliches?
Ich benutze einen QtWidgets.QPushButton von pyQT5.

Danke im Voraus für die Hilfe!
__deets__
User
Beiträge: 10309
Registriert: Mittwoch 14. Oktober 2015, 14:29

Freitag 30. Juli 2021, 13:03

Ohne Code schwer zu sagen. Wenn ich raten müsste, dann macht deine Funktion einfach zu lange etwas, blockiert dadurch die GUI, und sollte zb in einen Worker-Thread oder in kleinere Arbeitspakete geteilt werden.
jcshine
User
Beiträge: 4
Registriert: Freitag 30. Juli 2021, 12:19

Freitag 30. Juli 2021, 13:23

Code: Alles auswählen

       
    def __init__(self, parent=None, adminMode=False):
        super(MainView, self).__init__(parent)
        settings_area = QtWidgets.QScrollArea(self)
        settings_area.setWidgetResizable(True)
        settings_area.setFrameShape(QtWidgets.QFrame.NoFrame)
        settings_layout = QtWidgets.QGridLayout()
        settings_area_inner = QtWidgets.QFrame(settings_area)
        settings_area_inner.setFrameShape(QtWidgets.QFrame.NoFrame)
        settings_area_inner.setLayout(settings_layout)
        settings_area.setWidget(settings_area_inner)
        top_level_layout = QtWidgets.QGridLayout(self)
        top_level_layout.addWidget(settings_area)

        copy_button = QtWidgets.QPushButton("text")
        top_level_layout.addWidget(copy_button)
        
       
        copy_button.pressed.connect(
            lambda: Qt.QApplication.clipboard().setText(
                json.dumps(self.obtainSettings()[0], indent=4)
            )
 
Das ist der Code, da passiert nichts spannendes mMn. mein Problem ist nicht, dass etwa ein Fehler auftritt, ich möchte lediglich eine Visuelle Bestätigung haben, dass ich den Button gedrückt habe, wie es bei einem normalen PushButton eben der Fall ist.

Ich weiß nicht woher das kommt, aber der Button, der durch den oben gezeigten Code erstellt wir, sieht so aus
Bild
__deets__
User
Beiträge: 10309
Registriert: Mittwoch 14. Oktober 2015, 14:29

Freitag 30. Juli 2021, 13:28

Das sieht in der Tat nicht besonders aufwändig aus. Wobei es ja auch nicht dem normalen Styling von Buttons entspricht. Woher kommt der Style?

Und auf den Verdacht hin, dass es eben doch die Operation ist, kannst du die ja mal durch ein simples Print ersetzen, um einen Einfluss auszuschließen.
jcshine
User
Beiträge: 4
Registriert: Freitag 30. Juli 2021, 12:19

Montag 2. August 2021, 07:39

Ich habe tatsächlich ein bisschen tiefer im Verzeichnis ein style.css gefunden, in dem die styles der einzelnen Komponenten dargelegt sind, das für Buttons sieht wie folgt aus:

QPushButton{
background-color: rgb(255, 170, 0);
border-radius: 8px;
border: 2px solid rgb(255, 170, 0);
font-size: 14px;
padding: .25em;
height: 16px;

}

Weiß jemand wie der Button ein visuelles Feedback beim Klicken bekommen kann? Ich weiß ehrlich gesagt nicht genau wie man so etwas nennt, der Button sollte beim klicken kurz eingedrückt und dann wieder nach oben kommen, wie ein üblicher Button eben. Als Alternative habe ich mir gedacht den Text des Buttons beim Klicken zu verändern, das ist aber keine schöne Lösung
__deets__
User
Beiträge: 10309
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 2. August 2021, 08:39

Das sollte alles in der Qt Dokumentation beschrieben sein. Siehe zb hier: https://stackoverflow.com/questions/191 ... lesheet-qt
jcshine
User
Beiträge: 4
Registriert: Freitag 30. Juli 2021, 12:19

Montag 2. August 2021, 11:04

Vielen Dank, der Link hat mir sehr geholfen! Meine Frage ist hiermit beantwortet.
Antworten