2016-06-29 18 views
5

Un PyQt evento pulsante può essere collegato in modo normale ad una funzione in modo che la funzione riceve gli argomenti segnale standard (in questo caso il pulsante controllato stato):passare argomenti extra al fessura PyQt senza perdere argomenti predefinito dei segnali

def connections(self): 
    my_button.clicked.connect(self.on_button) 

def on_button(self, checked): 
    print checked # prints "True" 

Oppure, gli argomenti segnale di default possono essere sovrascritti con lambda:

def connections(self): 
    my_button.clicked.connect(lambda: self.on_button('hi')) 

def on_button(self, message): 
    print message # prints "hi" 

c'è un bel modo per tenere entrambi gli argomenti di segnale in modo che possa essere ricevuto direttamente da una funzione come qui di seguito?

def on_button(self, checked, message): 
    print checked, message # prints "True, hi" 
+0

È possibile sottoclasse il pulsante e creare un nuovo segnale che emetterà lo stato di una pulsante e un messaggio. – SnoozeTime

+0

[Eli Bendersky] (https://eli.thegreenplace.net) ha pubblicato [un articolo su questo] (https://eli.thegreenplace.net/2011/04/25/passing-extra-arguments-to-pyqt- slot) nel 2011. – delrocco

risposta

11

tuo lambda potrebbe prendere un argomento:

def connections(self): 
    my_button.clicked.connect(lambda checked: self.on_button(checked, 'hi')) 

def on_button(self, checked, message): 
    print checked, message # prints "True, hi" 

Oppure si potrebbe usare functools.partial:

def connections(self): 
    my_button.clicked.connect(functools.partial(self.on_button, 'hi')) 

def on_button(self, message, checked): 
    print checked, message # prints "True, hi" 
Problemi correlati