Forums Neueste Beiträge
 

PyQt: QAction verbinden, slots

14/05/2009 - 10:41 von Ole Streicher | Report spam
Hallo,

mir ist bei PyQt nicht so ganz klar, wie ich eine QAction mit einer
konkreten Aktion verbinden muss. Typischerweise findet man sowas:

quit_act = QtGui.QAction('&Quit', app_window)
app_window.connect(quit_act, QtCore.SIGNAL('triggered()'),
QtCore.SLOT('close()'))

andererseits wird auch geschrieben, dass Qt-Slots ganz normale
Python-Methoden sein können. Demzufolge wàre

app_window.connect(quit_act, QtCore.SIGNAL('triggered()'),
app_window.close)

ebenso korrekt? Worin unterscheiden sich die beiden?

Habe ich es eigentlich richtig verstanden, dass Qt-SLOTS nichts mir
Python-Slots zu tun haben?

Viele Grüße

Ole
 

Lesen sie die antworten

#1 Sebastian Wiesner
14/05/2009 - 10:55 | Warnen spam
<Ole Streicher – Donnerstag, 14. Mai 2009 10:41>

Hallo,

mir ist bei PyQt nicht so ganz klar, wie ich eine QAction mit einer
konkreten Aktion verbinden muss. Typischerweise findet man sowas:

quit_act = QtGui.QAction('&Quit', app_window)
app_window.connect(quit_act, QtCore.SIGNAL('triggered()'),
QtCore.SLOT('close()'))

andererseits wird auch geschrieben, dass Qt-Slots ganz normale
Python-Methoden sein können. Demzufolge wàre

app_window.connect(quit_act, QtCore.SIGNAL('triggered()'),
app_window.close)

ebenso korrekt? Worin unterscheiden sich die beiden?



Man kann alle Slots verbinden, in dem man Methoden-Objekte übergibt. Bei
Qt4-Slots ist das allerdings ineffizienter, weil der Aufruf dann über Python
làuft, obwohl sowohl Slots als auch Aufrufer im "C++-Raum" leben. Dieser
Nachteil dürfte allerdings kaum ins Gewicht fallen.

Das Verbinden über QtCore.SLOT funktioniert natürlich nur bei C++-Slots, und
führt im Gegensatz zum anderen Weg dazu, dass Python bei einem Slotaufruf
nicht bemüht wird.

Ich persönlich verwende immer den letzteren Weg, weil er besser lesbar und
weniger fehleranfàllig ist.

Freiheit ist immer die Freiheit der Andersdenkenden.
(Rosa Luxemburg)

Ähnliche fragen