将额外的参数传递给PyQt插槽而不会丢失默认信号参数

101*_*101 8 python pyqt pyqt4

PyQt按钮事件可以以正常方式连接到函数,以便函数接收默认信号参数(在这种情况下按钮检查状态):

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

def on_button(self, checked):
    print checked   # prints "True"
Run Code Online (Sandbox Code Playgroud)

或者,可以使用lambda以下方式覆盖默认信号参数:

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

def on_button(self, message):
    print message   # prints "hi"
Run Code Online (Sandbox Code Playgroud)

是否有一种很好的方法可以保留两个信号参数,以便它可以直接由下面的函数接收?

def on_button(self, checked, message):
    print checked, message   # prints "True, hi"
Run Code Online (Sandbox Code Playgroud)

The*_*ler 23

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"
Run Code Online (Sandbox Code Playgroud)

或者您可以使用functools.partial:

# imports the functools module
import functools 

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"
Run Code Online (Sandbox Code Playgroud)

  • 这个答案永远不会过时。它一直在救我。谢谢! (2认同)