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”连接起来[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PIG 中将变量与一些硬编码值连接起来

如何在Jmeter中将“嵌套”变量与字符串连接起来

如何在 Python 中将函数连接到 PyQT5 GUI

PYQT5画线[重复]

laravel刀片将youtube iframe与变量连接起来[重复]

如何在pyqt5中将按钮移动到另一个框架?