我正在尝试使用lambda表达式将实例作为参数传递给插槽,但始终出现以下错误:
TypeError: on_xOffsetSpinBox_editingFinished() missing 1 required positional argument: 'instance'
我尝试了lambda和partial来传递实例参数,但两种方法都不起作用。你知道吗
我之所以要这样做,是因为我想在几个不同的类中重用相同的方法。你知道吗
class AppWindow(QMainWindow):
def __init__(self):
...
self.ui.xOffsetSpinBox.editingFinished.connect(lambda: AppWindow.on_xOffsetSpinBox_editingFinished(self))
...
@staticmethod
def on_xOffsetSpinBox_editingFinished(instance):
...
我想使用这个静态方法作为不同对话类中另一个信号的插槽。你知道吗
TL;DR;失败的是Qt设计器提供的自动连接,而不是显式连接。你知道吗
我假设
ui
是Qt Designer生成的类的对象,如果检查pyuic生成的代码,则以下指令应该是:如果插槽具有以下模式,^{} 方法将自动连接:
在您的例子中,
on_xOffsetSpinBox_editingFinished
满足了这个要求,因为它有一个xOffsetSpinBox
对象,这个对象是一个QSpinBox
对象,它有一个editingFinished
信号,您可以检查您是否对所建立的连接进行了注释,您将看到您仍然观察到相同的问题。你知道吗一种可能的解决方案是更改静态方法的名称,使其与指定的模式不匹配,例如:
另一种解决方案是使用@pyqtSlot()装饰器,通过传递与指定模式不匹配的name参数。你知道吗
相关问题 更多 >
编程相关推荐