Hallo,
ich möchte einen Code ausführen, wenn ein QPushButton den Fokus und bekommt und einen anderen Code wenn er den Fokus verliert.
Meiner Meinung nach geht das mit focusInEvent und focusOutEvent .
Leider finde ich im Internet kein Codebeispiel wie das Event implementiert wird, könnt Ihr mir bitte helfen?
Events: QPushButton bekommt Fokus, verliert Focus
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
- __blackjack__
- User
- Beiträge: 13105
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@PythonMarlem: Da ist IMHO nicht viel wofür man ein Beispiel bräuchte. Du musst halt vom `QPushbutton` ableiten und die Methode überschreiben. Wenn das Originalverhalten an der Stelle nicht verloren gehen soll, dann musst Du die Methode in der Basisklasse aufrufen. Ansonsten kannst Du da dann machen was Du willst.
Ich fände an der Stelle das ableiten müssen ungünstig, weil ich gerne mit dem Designer arbeite. Ich würde wahrscheinlich eher mit `QObject.installEventFilter()` arbeiten.
Ich fände an der Stelle das ableiten müssen ungünstig, weil ich gerne mit dem Designer arbeite. Ich würde wahrscheinlich eher mit `QObject.installEventFilter()` arbeiten.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
ähm ... also ich muß ein neues Objekt vom Typ QPushbutton erstellen? *irretiertschau*__blackjack__ hat geschrieben: ↑Samstag 30. Mai 2020, 13:08 @PythonMarlem: Da ist IMHO nicht viel wofür man ein Beispiel bräuchte. Du musst halt vom `QPushbutton` ableiten und die Methode überschreiben.
- __blackjack__
- User
- Beiträge: 13105
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@PythonMarlem: Ja genau. Eine eigene Klasse schreiben, die von `QPushbutton` erbt und die beiden Methoden implementiert. Wenn Du mit diesen beiden Methoden etwas machen willst.
Wenn Du ohne eine abgeleitete Klasse auskommen möchtest, beispielsweise weil die GUI mit dem Designer erstellt werden soll und der ja ”nur” den `QPushbutton` kennt, und das hinzufügen von neuen Widgets zusätzliche Arbeit macht, muss man mit `QObject.installEventFilter()` arbeiten. Dafür ist in der Qt-Dokumentation auch ein Beispiel.
(Ich wüsste spontan nicht mal ob man dem Designer auch neue Widgets beibringen kann, die in Python geschrieben sind.)
Wenn Du ohne eine abgeleitete Klasse auskommen möchtest, beispielsweise weil die GUI mit dem Designer erstellt werden soll und der ja ”nur” den `QPushbutton` kennt, und das hinzufügen von neuen Widgets zusätzliche Arbeit macht, muss man mit `QObject.installEventFilter()` arbeiten. Dafür ist in der Qt-Dokumentation auch ein Beispiel.
(Ich wüsste spontan nicht mal ob man dem Designer auch neue Widgets beibringen kann, die in Python geschrieben sind.)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
Habe es geschafft;
Frage: Wie finde ich die Standardfarbe eines QPushButton heraus?
Code: Alles auswählen
class AcccessibilityButton(QPushButton):
def focusInEvent(self, QFocusEvent):
self.setStyleSheet("background-color: yellow")
def focusOutEvent(self, QFocusEvent):
self.setStyleSheet("background-color: blue")
class MyWindow(QMainWindow):
def __init__(self):
# Konstruktor von QMainWindow aufrufen
super().__init__()
self.initMe()
def initMe(self):
# Fenstergröße und Titel einstellen
self.setMinimumSize(QSize(300, 100))
self.setWindowTitle('Barrierefreiheit mit Qt')
self.setGeometry(50, 50, 300, 100)
ButtonBetriebssystem = AcccessibilityButton("Hallo &Betriebssystem", self)
- __blackjack__
- User
- Beiträge: 13105
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@PythonMarlem: Ich denke Du gehst da einen falschen Weg. Das ist eher etwas für Stylesheets oder einen eigenen QStyle oder gar ein Theme.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
Aber es funktioniert, so wie ich es mir gewünscht habe:
Code: Alles auswählen
# Der aktive Schalter bekommt die Farbe Gelb.
# Sehbehinderte können so besser erkennen welches Schalter aktiv ist.
class AcccessibilityButton(QPushButton):
def focusInEvent(self, QFocusEvent):
self.setStyleSheet("background-color: yellow")
def focusOutEvent(self, QFocusEvent):
self.setStyleSheet("background-color: #E1E1E1")
class MyWindow(QMainWindow):
def __init__(self):
# Konstruktor von QMainWindow aufrufen
super().__init__()
self.initMe()
def initMe(self):
# Fenstergröße und Titel einstellen
self.setMinimumSize(QSize(300, 100))
self.setWindowTitle('Barrierefreiheit mit Qt')
self.setGeometry(50, 50, 300, 100)
ButtonBetriebssystem = AcccessibilityButton("Hallo &Betriebssystem", self)
ButtonBetriebssystem.setGeometry(20, 5, 130, 30)
ButtonBetriebssystem.setToolTip("Es wird ausgegeben wie das Betriebssystem heißt")
ButtonBetriebssystem.setAccessibleName("Es wird ausgegeben wie das Betriebssystem heißt")
ButtonBetriebssystem.setDefault(True)
ButtonBetriebssystem.clicked.connect(self.BetriebssystemAbfragen)
ButtonBetriebssystem.show()
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
hover wird ausgeführt beim drüber schweben. Hier geht es darum, dass wenn ein QPushButton oder ein QLineEdit aktiv ist, dass das die Hintergrundfarbe Gelb wird, damit Menschen mit einer Sehbehinderung deutlich Sehen können, welcher QPushButton oder QLineEdit aktiv ist.
Was meinst Du damit? Bitte erkläre mir Dein Problem, ich bin Python-Anfänger.Und als Experte für accessibility: dank dieses “Tricks” ist der einfache Austausch mit einem hochkontrast oder anderen farbschema Stylesheet nicht mehr möglich.
Das hat mit Anfänger nichts zu tun. Stylesheets allgemein erlauben einfaches um stylen der Anwendung. Eben auf verschiedene Anforderungen. Der eine sieht schlecht und braucht erhöhten Kontrast. Der Andere ist farbenblind und braucht eine andere Palette.
Wenn du jetzt solche Dinge programmierst, mit fest ein kodierten werten, dann lässt sich das eben nicht mehr anpassen.
Wenn du jetzt solche Dinge programmierst, mit fest ein kodierten werten, dann lässt sich das eben nicht mehr anpassen.
Und es gibt den Focus natürlich auch als Zustand: https://doc.qt.io/qt-5/stylesheet-reference.html
- __blackjack__
- User
- Beiträge: 13105
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ich denke das hat in der Anwendung überhaupt nichts zu suchen. Wenn ich hohen Kontrast und gelbe Farbe für die Anzeige des Elements mit dem Eingabefokus brauche, dann stelle ich das in den Systemeinstellungen durch passende Auswahl eines Themes und Farbeinstellungen ein und habe das in *allen* Anwendungen und bin da nicht auf den Autor *einer* Anwendung angewiesen, der meint mir, auch in guter Absicht, irgendwas aufzwingen zu müssen. Denn umgekehrt kotzen alle Anwender die gelb fokussierten Elemente nicht haben wollen, oder gar schlechter damit klar kommen, als mit den Einstellungen, die sie selbst vorgegeben haben.
Und wenn Du da unbedingt etwas vorgeben möchtest, dann sollte das optional und einfach sein. Eben beispielsweise das der Benutzer die Wahl hat ein von Dir erstelltes Stylesheet für die ganze Anwendung zu verwenden, oder eben auch nicht. Das kann man zentral an einer Stelle erledigen und muss da nicht von jedem möglichen Widget eine neue Klasse ableiten nur um das Fokusereignis zu überschreiben. Was dann ja auch zur Folge hat, dass man den Designer nicht mehr verwenden kann.
Und wenn Du da unbedingt etwas vorgeben möchtest, dann sollte das optional und einfach sein. Eben beispielsweise das der Benutzer die Wahl hat ein von Dir erstelltes Stylesheet für die ganze Anwendung zu verwenden, oder eben auch nicht. Das kann man zentral an einer Stelle erledigen und muss da nicht von jedem möglichen Widget eine neue Klasse ableiten nur um das Fokusereignis zu überschreiben. Was dann ja auch zur Folge hat, dass man den Designer nicht mehr verwenden kann.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ich befürchte, dass hier gutemeinter Aktionismus völig am Ziel vorbei schießt.
Qt bringt ja die entsprechenden Zugangshilfen schon mit, _ohne_ dass man sich darum überhaupt kümmern muss. Bei Buttons fällt AccessibleName auf die Beschriftung zurücke, AccessibleDescription auf den Tooltext. Damit funktioniert es, ohne dass man sich mit dem Thema innig beschäftigen muss.
Für die Farbgebung gilt, was __blackjack__ schrieb. Auch hier funktioniert es, ohne dass man sich als Entwickler in der Anwendung großartig Gedanken darum machen muss.
Qt bringt ja die entsprechenden Zugangshilfen schon mit, _ohne_ dass man sich darum überhaupt kümmern muss. Bei Buttons fällt AccessibleName auf die Beschriftung zurücke, AccessibleDescription auf den Tooltext. Damit funktioniert es, ohne dass man sich mit dem Thema innig beschäftigen muss.
Für die Farbgebung gilt, was __blackjack__ schrieb. Auch hier funktioniert es, ohne dass man sich als Entwickler in der Anwendung großartig Gedanken darum machen muss.