我有10个lineedit小部件,由qt-designer
设计,我在代码中定义signal&slot,
我的问题是在代码中重复相同的信号和插槽10次,
像这样:
self.ui.descCode_lineEdit_1.cursorPositionChanged.connect(lambda: self.Desc(1))
self.ui.Desc_lineEdit_1.editingFinished.connect(lambda: self.DescRate(1))
self.ui.descCode_lineEdit_2.cursorPositionChanged.connect(lambda: self.Desc(2))
self.ui.Desc_lineEdit_2.editingFinished.connect(lambda: self.DescRate(2))
...
self.ui.descCode_lineEdit_10.cursorPositionChanged.connect(lambda: self.Desc(10))
self.ui.Desc_lineEdit_10.editingFinished.connect(lambda: self.DescRate(10))
我用getattr
写这些:
for i in range(1, 11):
getattr(self.ui, 'descCode_lineEdit_{}'.format(i)).cursorPositionChanged.connect(lambda: self.Desc(i))
getattr(self.ui, 'Desc_lineEdit_{}'.format(i)).editingFinished.connect(lambda: self.DescRate(i))
但是当运行代码时,只有第10个小部件的signal&slot可以正常工作,其他字段则什么也没有。 你知道如何修复这部分代码并重复相同的信号吗?你知道吗
谢谢。你知道吗
这里的问题在于lambda和i。稍后只保存i的最后一个值。因此,可以这样尝试:
最小不工作示例:
最小工作示例:
发生了什么?
在第二个例子中,我让outter
lambda
函数返回一个函数。outterlambda
函数将由输入i
返回一个内置了这个i
的函数来计算。因此i
的值被单独保存,并且事情按预期工作。你知道吗解决方案
因此,您的解决方案可以如下所示:
干杯!你知道吗
使用数据结构可能更容易。你知道吗
试试这个代码:-你知道吗
相关问题 更多 >
编程相关推荐