PyQt5中将变量与“self”连接起来[重复]
Posted
技术标签:
【中文标题】PyQt5中将变量与“self”连接起来[重复]【英文标题】:Concatenating variable with "self" in PyQt5 [duplicate] 【发布时间】:2020-10-16 09:53:46 【问题描述】:我有 10 个复选框,为了检查复选框是否被选中,我尝试使用循环。 tacb1
是第一个复选框的名称,tacb2
是第二个复选框的名称,依此类推。我想使用一个看起来像这样的循环:
for i in range(1,11):
if self.tacb'"+i+"'isChecked() == True:
print("hi")
else:
print("bye")
它将self.tacb'"+i+"'isChecked()
行的错误作为无效语法抛出。如何将变量与self
连接起来?
【问题讨论】:
您不能连接对象引用和字符串。使用getattr(self, 'tacb'.format(i)).isChecked()
。见How to access object attribute given string corresponding to name of that attribute
【参考方案1】:
AlexLaur's answer using lists 是做到这一点的最佳方式,但为了完整起见,这里有一个示例,说明您将如何使用 getattr
来做同样的事情
class MyClass:
def __init__(self):
self.item1 = 1
self.item2 = 2
self.item3 = 3
def check(self):
for i in range(1,4):
print(getattr(self,f'itemi'))
c = MyClass()
c.check()
【讨论】:
【参考方案2】:我认为最好的方法是将所有复选框实例存储到这样的列表中:
self.all_checkboxs = [checkox_a, checkox_b, ..., checkox_n]
然后你可以像这样迭代:
for checkbox in self.all_checkboxs:
if checkbox.isChecked():
bar()
else:
foo()
如果确实需要使用字符串,可以使用python exec(),但我不推荐这种方式。
【讨论】:
它正在工作。非常感谢! 为什么建议exec
,什么时候可以(并且应该)只使用getattr
?
你是对的@musicamante。当我发布我的答案时,我没有这样想。但是使用 getattr 比使用 exec() 更好。以上是关于PyQt5中将变量与“self”连接起来[重复]的主要内容,如果未能解决你的问题,请参考以下文章