Funktion mit keyword arguments an Signal binden

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

Hallo zusammen,

ich habe eine Funktion mit einem keyword argument als Parameter, die ich mit einem Button verbinden möchte. Das keyword argument soll standardmäßig True sein, ist aber immer false.
Hier mal der Code:

Code: Alles auswählen

class Foo(object):
    def __init__(self, ...):
    self.ui.button.clicked.connect(self.func)
    ...
    def func(self, t = True):
        ...
Was mach ich falsch?
Dies ist keine Signatur!
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Ich sehe nicht, wie man das auf vier Zeilen Code ablesen sollte ...

Sebastian
Das Leben ist wie ein Tennisball.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Such dir was aus:
`lambda : foo(keyword=True)` oder `functools.partial(foo, keyword=True)`
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

Danke, Danke :)
Dies ist keine Signatur!
lunar

@EyDu: In diesem Fall kann man den Fehler durchaus an vier Zeilen ablesen. Das "clicked()"-Signal hat ein boolsches Argument, welches anzeigt, ob der Knopf angekreuzt ist. Da "func()" ebenfalls ein boolsches Argument annimmt, wird das Argument des Signals an den Slot weitergeben, PyQt kann ja nicht erraten, dass das in diesem Fall unerwünscht ist. Da einfache Knöpfe normalerweise nicht ankreuzbar sind, ist das Argument folglich immer "False".

@Shaldy: Alternativ kannst Du "func" mit "pyqtSlot()" dekorieren. Das nimmt "t" explizit von der Slot-Signatur aus.
Antworten