`QPushButton` in .ui-Datei um eigene Methode erweitern

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

Hallo

Ich würde gerne einen `QPushButton`, den ich mit dem Qt Designer in einer .ui-Datei platziert habe, um einen Klickzähler erweitern. Dieser Klickzähler soll zählen, wie oft auf den `QPushButton` seit Programmstart geklickt wurde. Bei Erreichung eines Schwellenwertes soll dann ein Signal ausgelöst werden.

Lässt sich so etwas (einfach) umsetzen?

Gruß
Atalanttore
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Stichwort: Monkey Patching.

Klassen und Instanzen können dynamisch zur Laufzeit um Attribute und Funktionen erweitert werden.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

@sparrow: nein, und wirklich nein. Erstens ist das allgemein kein Vorgehen, das anzuraten ist. Und zweitens ist es mit dem C++-basierten Klassen von Qt auch eher schwierig bis unmöglich.

@Attalantore: wenn man clicks zählen will, verbindet man sich mit dem clicked Signal. Warum glaubst du das anders machen zu müssen?
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

@__deets__: Mit einer Klickzählmethode im `QPushButton` könnte ich für den Wert einfach auf die Objektmethode zugreifen und müsste nicht anderswo im Code das `clicked()`-Signal eines `QPushButton` mit einem Zähler bzw. Zählmethode außerhalb des Objektes verknüpfen.

Gruß
Atalanttore
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es steht dir frei, deine Buttons abzuleiten, und so etwas dann selbst einzubauen. Welchen Wert es nun aber hat, an einer Stelle auf einen Button zuzugreifen, um dort dann einen Wert auszulesen, wenn man auf die gleiche Art und Weise auf das Signal eben diesen Buttons zugreifen kann, und sich dafuer anmeldet, das erschliesst sich mir jetzt nicht. Denn letzteres ist zusammensetzbar. Wenn du willst, kannst du dir einen generischen Signal-Counter schreiben, der dann fuer alles moegliche nutzbar ist. Wohingegen dein Ansatz einen CountPushButton, CountDropDown, CountSlider, CountIrgendwas erfordert. Mehr Code, weniger gut. Aber das ist natuerlich deine Entscheidung.
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

Bisher habe ich dafür eine Klasse `Counter` verwendet, von der für jeden `QPushButton` ein Zähler erzeugt wird.

Gruß
Atalanttore
Antworten