记录一下花了大半天的
需求是给动态命名的按钮绑定对应的函数,函数带参数,一开始是用exec加lambda写的,一直报错self未定义
exec(f'self.my_pushbutton_{name}.clicked.connect(lambda x: self.unpack(\'{name}\'))')
Traceback (most recent call last):
File "<string>", line 1, in <lambda>
NameError: name 'self' is not defined
一开始是以为exec得不到self,用别的获取动态命名的方法也不行;后来发现是exec内的lambda不能获取self,就换了一种传参就行了;
exec(f'self.my_pushbutton_{name}.clicked.connect(functools.partial(self.unpack, \'{name}\'))')
然后还有一点是在用动态变量做if判断的时候,如果先声明一个变量再用exec赋值是赋值不了的,可以直接用eval赋值。
if_show = True
exec(f'if_show = self.if_show_{name}') # 赋值不了,if_show始终是True
if if_show:
..
if_show = eval(f'self.if_show_{name}') # 这样就行