2016-06-29 2 views
5

Событие кнопки PyQt может быть подключено обычным образом к функции, так что функция получает аргументы сигнала по умолчанию (в этом случае состояние кнопки проверено):Передача дополнительных аргументов в слот PyQt без потери аргументов сигнала по умолчанию

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

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

Или аргументы сигнальные по умолчанию можно изменить с помощью lambda:

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

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

есть хороший способ держать оба аргумента сигнала, поэтому он может быть непосредственно получен с помощью функции, как показано ниже?

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

Вы можете унаследовать кнопку и создать новый сигнал, который будет излучать состояние и сообщение. – SnoozeTime

+0

[Eli Bendersky] (https://eli.thegreenplace.net) опубликовал [статью об этом] (https://eli.thegreenplace.net/2011/04/25/passing-extra-arguments-to-pyqt- слот) в 2011 году. – delrocco

ответ

11

Ваш lambda может принимать аргумент:

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" 

Или вы могли бы использовать 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" 
Смежные вопросы