Python 如何使用for循环访问PyQt中多个复选框的checbox文本?
我想访问多个复选框的复选框文本,例如Python 如何使用for循环访问PyQt中多个复选框的checbox文本?,python,pyqt5,Python,Pyqt5,我想访问多个复选框的复选框文本,例如self.checkbox\u x.setText(“Hello World”),其中x等于1到100。在任何循环的帮助下都可以打印出来。复选框的objectName编号为checkBox\u 1至checkBox\u 100您可以使用setattr()/getattr()动态创建变量 import sys from PyQt5.Qt import * class Example(QWidget): def __init__(self):
self.checkbox\u x.setText(“Hello World”)
,其中x等于1到100。在任何循环的帮助下都可以打印出来。复选框的objectName编号为checkBox\u 1
至checkBox\u 100
您可以使用setattr()
/getattr()
动态创建变量
import sys
from PyQt5.Qt import *
class Example(QWidget):
def __init__(self):
super().__init__()
lay = QVBoxLayout(self)
for i in range(10):
self.checkBox = QCheckBox(f'cb_{i+1}')
lay.addWidget(self.checkBox)
setattr(self, "checkBox_{}".format(i+1), self.checkBox)
lay.addWidget(QPushButton("Click me", clicked=self.create_txt))
def create_txt(self):
for i in range(10):
obj = getattr(self, "checkBox_{}".format(i+1))
obj.setText("Hello World")
if __name__ == "__main__":
app = QApplication(sys.argv)
w = Example()
w.show()
sys.exit(app.exec_())
如果您在创建它们时无法将它们附加到列表中(您应该能够这样做),那么您可以非常“非法”(完全不推荐)地对范围(10)中的i执行
:eval(f“checkBox{i}.setText(“Hello World”)
。最好的解决方案是无论您在何处定义它们,也将它们附加到列表中;checkBox\u list=[]
,checkbox\u list.append(self.checkbox\u 1)
,然后对范围内的按钮(10)使用:button.setText(“Hello World”)
@Felipe我想,我无法理解你的评论。我试图暗示的是我想要访问所有复选框的复选框文本。我尝试对范围内的x(15,37)使用:
…getattr(self,“checkBox”{}.format(x))
。例如,如果有许多不同文本的复选框,如self.checkBox\u 1.setText(“Hello World”)
self.checkBox\u 37.setText(“Hello World 36”)
。有没有办法访问这些复选框的文本并打印它们?我不建议对此任务使用getattr
。相反,无论您在哪里定义初始的checkBox\ux
对象,都要将它们附加到列表中,比如说self.checkBox\u list
。该列表将包含所有的checkBox\ux
>对象,这将允许您遍历它们并调用它们的函数。这是最干净的方法。