Pushbutton - Layoutverhalten anpassen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

Hallo zusammen,
habe hier einen Beispielcode zu Pushbutton.

Code: Alles auswählen

#!/usr/bin/python

import os
import sys
from PyQt5.QtWidgets import (
    QWidget,
    QPushButton,
    QHBoxLayout,
    QVBoxLayout,
    QApplication
    )

class ButtonBar(QWidget):

    def __init__(self):
        super(ButtonBar, self).__init__()

        hbox = QHBoxLayout()
        hbox.addStretch(1)
        for button in ['Ok', 'Cancel']:
            btn = QPushButton(self)
            btn.setText(button)
            btn.clicked.connect(self.senderContactButton)
            hbox.addWidget(btn)

        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox)
        self.buttonBarLayout = vbox

        self.setLayout(self.buttonBarLayout)
        self.setGeometry(300, 300, 300, 150)
        self.setWindowTitle('Buttons')
        self.show()


    def senderContactButton(self):
        button = self.sender()
        print("button: ", button.text())

def main():

    app = QApplication(sys.argv)
    ex = ButtonBar()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
Nach dem Start, ist der Ok-Button markiert, beim Betätigen des Cancel-Button ist dieser markiert. Das ist wohl das normale Verhalten.
Nun hätte ich gern, dass kein Button beim Start markiert ist und beim Betätigen eines Buttons, bei diesem danach keine Markierung angezeigt wird.
Leider hat mir das Googeln bei diesem Thema, keine Lösung aufgezeigt, daher würde ich mich über Eure Unterstützung freuen!

Grüße Nobuddy
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Das ist das normale Verhalten, dass man erkennen kann, welches Widget gerade den Fokus hat. Ohne diese Darstellung wäre ein Bedienen der GUI mit der Tastatur unmöglich.
Warum willst Du also von dem Standardverhalten, das zwingend nötig ist und das jeder kennt und es auch nicht anders erwarten würde, abweichen?
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

Vielleicht, ist dann Pushbutton nicht das Richtige, wenn das Bedienen der GUI mit der Tastatur unmöglich ist.
Bei Tkinter ist das nicht der Fall. Dort ist das Verhalten so, dass nach dem Klicken des Button, dieser danach wieder in den vorherigen Ausgangszustand geht.
Welche Alternative gibt es in Qt dazu?
Benutzeravatar
__blackjack__
User
Beiträge: 13110
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Nobuddy: Das bedienen ist ja möglich, Du willst das anscheinend ändern, also zumindest erschweren. Und hast die Frage nach dem Warum nicht beantwortet.

Bei Tk wird bei mir auch die Schaltfläche, die den Fokus hat, visuell gekennzeichnet, und das geht selbstverständlich auch nicht weg wenn man drauf klickt. (Solange das nicht dazu führt, das ein anderes Element den Fokus bekommt.)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

Warum nicht, will ich beantworten.
Ist für mich einfach irritierend. Ich entscheide durch Betätigen eines Buttons, eine Aufgabe auszuführen und danach evtl. einen weiteren Button. Eine Kenntlichmachung, welchen Button ich zuletzt betätigt habe, brauche ich nicht und will ich auch eigentlich nicht.

Bei Tk, habe ich die Möglichkeit dieses gewünschte Verhalten zu etablieren.
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

Wenn das Bedienen bei Pushbutton durch mein angestrebtes Verhalten möglich ist, wie kann ich das umsetzen?
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du kannst in die Styling-Optionen gucken, du kannst kuenstlich den Focus wegnehmen nach dem Klick, und du kannst einen eigenen Button bauen, der sich anders verhaelt.
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

Mit Stytesheet, habe ich es schon versucht, wahrscheinlich habe ich da nicht den richtigen Ansatz gefunden.
Mein Stylesheet zu Pushbutton:

Code: Alles auswählen

QPushButton {
background-color: rgb(169,169,169); 
color: rgb(255,255,255);
}
QPushButton:pressed {
background-color : rgb(169,169,169);
color: rgb(255,255,255);
}
QPushButton:hover {
background-color : lightgreen;
color: black;
}
Wie mache ich das bei Qt, kuenstlich den Focus nach dem Klick wegnehmen?
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

Zu Stylesheet, habe ich diese Lösung gefunden:

Code: Alles auswählen

QPushButton:focus {
border: none;
outline: none;
}
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Und wie genau soll man das Programm jetzt mit der Tastatur bedienen?
Gar nicht mehr?
Oder ist muss man raten, wo gerade der Fokus sitzt?
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

Wo soll da ein Problem sein?
In diesem kleinen Beispiel klicke ich auf 'Ok' oder 'Cancel' und das tut es auch.
Man muss auch nicht raten, nur lesen, was auf dem Button steht. :wink:
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Frage ist halt, ob du der einzige Benutzer deines Programmes bist, der da natuerlich jedwede Praeferenz reinhacken kann. Oder ob du ein Programm schreibst, das andere Benutzer ggf. eben mit der Tastatur benutzen wollen, und jetzt ist das nicht mehr sinnvoll moeglich. Und ich bin zB so jemand. Jeder Griff zur Maus ist verschwendete Lebenszeit. Sich also auf etablierte Konventionen zu stuetzen macht es Benutzern einfacher.
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

Habe wohl versäumt, den Nutzen genauer zu erklären.
Das Beispiel mit den Buttons 'Ok' und 'Cancel', trifft nicht den eigentlichen Verwendungszweck. Es handelt sich vielmehr um benutzerspezifische Button.

Bei nicht benutzerspezischen Buttons, wie 'Ok' und 'Cancel', macht das Standardverhalten Sinn und werde das selbst auch beibehalten.
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was heisst denn "benutzerspezifisch"? Alle moeglichen Arten von Dialogen zB in Windows benutze ich mit der Tastatur. Nicht nur die finalen Buttons Ok/Cancel (die sind ja sogar dann oft noch extra auf enter/esc gemappt).

Am Ende geht es mir nur um eines: wenn du der einzige Benutzer deines Tools bist, mach es wie du willst. Beschreib die Knoepfe senkrecht in Kisuaheli, etc pp. Aber wenn es eine Zielgruppe gibt, die nicht nur aus dir bestehst, solltest du Verwirrung *bei denen* vermeiden. Und nicht davon ausgehen, dass deine Art, mit der GUI zu arbeiten, die einzige ist. Wir betreiben grossen Aufwand, um unsere Produkte (Hard- und Software) einem Publikum aus "Fremden" so frueh wie moeglich zu zeigen, um solche Fehler zu vermeiden. Das ist fuer ein privates Projekt eher ungewoehnlich, wuerde ich auch nicht machen. Aber wenigestens ein paar Leuten sollte man das an sich schon zeigen. Oder sich eben damit abfinden, dass es nur fuer einen selbst ist, das ist ja auch ok.
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

Ich lass mir das nochmals durch den Kopf gehen, da Deine Argumente richtig sind :wink:
Benutzeravatar
__blackjack__
User
Beiträge: 13110
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wenn man GUIs nicht nur für sich selbst entwirft, sollte man auch ganz generell mal schauen wie andere (Standard-)Programme das handhaben die man benutzt. Man selbst benutzt ja meisten nur einen Weg für eine bestimmte Aktion, aber sehr oft gibt es mehrere Wege eine Aktion auszulösen, und die sind ja auch für irgendwen, der das dann immer *so* macht, und das am praktischsten findet. So einfache Sachen wie kopieren und/oder einfügen gibt es ja beispielsweise in allem möglichen Anwendungen. Die sind in der Regel über Tastaturkürzel, über ein Bearbeiten-Menü, über grafische Schaltflächen in einer Werkzeugleiste, und oft noch mal über ein Kontextmenü über die rechte Maustaste dort wo man was kopieren/einfügen kann, erreichbar. Kaum eine Person wird all diese Varianten benutzen, aber viele Personen werden ein oder zwei von den Varianten verwenden, und finden Programme die *ihre Varianten* dann nicht unterstützen irgendwie umständlich(er) zu bedienen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

Hallo, wollte mich nochmals kurz zurückmelden.
Ihr habt mich überzeugt, das Standardverhalten zu verwenden.
Danke für Eure Bemühung, dies mir zu verdeutlichen !

Grüße Nobuddy
Antworten