python - PyQt,Pyside2 为什么插槽通过 lambda 连接工作,而直接连接时不工作?
问题描述
我不明白为什么有时直接使用对象方法无法连接到信号。当我用这种方法给 lambda 时,它开始工作。
class MainWindowTrans:
def __init__(self, window: QMainWindow):
self.window = window
self.asset: QComboBox = self.window.findChild(QComboBox, 'asset')
self.asset.currentIndexChanged.connect(self.onOne)
self.asset.currentIndexChanged.connect(self.onTwo)
self.asset.currentIndexChanged.connect(onThree)
# self.asset.currentIndexChanged.connect(lambda : self.onOne())
self.asset.dumpObjectInfo()
def onOne(self):
print('on1')
@staticmethod
def onTwo():
print('on2')
def onThree():
print('on3')
输出:
OBJECT QComboBox::asset
SIGNALS OUT
signal: currentIndexChanged(int)
--> __GlobalReceiver__::unnamed onOne7f72b8ecab507f72e1dc0050()
--> __GlobalReceiver__::unnamed onTwo7f72e1dc05f0()
--> __GlobalReceiver__::unnamed onThree7f72e1f273b0()
on2
on3
如果我将第一个连接转换为 lambda 表达式,或者只是取消注释最后一行,一切正常:
OBJECT QComboBox::asset
SIGNALS OUT
signal: currentIndexChanged(int)
--> __GlobalReceiver__::unnamed onOne7fb8481a2a507fb8538140e0()
--> __GlobalReceiver__::unnamed onTwo7fb853814680()
--> __GlobalReceiver__::unnamed onThree7fb85397d3b0()
--> __GlobalReceiver__::unnamed <lambda>7fb848140c20()
Output:
on1
on2
on3
on1
解决方案
推荐阅读
- python - 仅更改整数列表中的最后一位
- java - 导航抽屉列表适配器
- ms-media-foundation - 具有两个输入的媒体基础转换
- java - 通过样式 ID 在 XWPFRun 上设置样式
- java - 将循环变量与对象变量一起使用
- asp.net - ASP.NET 退出 Post 并且不执行 Button 方法
- gatsby - 是否可以使用单个 Gatsby 项目运行不同的构建?
- javascript - 替换非字母数字和多个空格
- group-by - Odata V4 group by with Top and skip 不工作
- c++ - 为什么 stream::ignore 没有按预期工作?