Seite 1 von 1

Funktion mit keyword arguments an Signal binden

Verfasst: Dienstag 1. Februar 2011, 17:10
von Shaldy
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?

Re: Funktion mit keyword arguments an Signal binden

Verfasst: Dienstag 1. Februar 2011, 17:15
von EyDu
Hallo.

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

Sebastian

Re: Funktion mit keyword arguments an Signal binden

Verfasst: Dienstag 1. Februar 2011, 17:17
von cofi
Such dir was aus:
`lambda : foo(keyword=True)` oder `functools.partial(foo, keyword=True)`

Re: Funktion mit keyword arguments an Signal binden

Verfasst: Dienstag 1. Februar 2011, 17:26
von Shaldy
Danke, Danke :)

Re: Funktion mit keyword arguments an Signal binden

Verfasst: Dienstag 1. Februar 2011, 17:36
von 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.