我明白为什么会出现此错误,它正在查找我的对象作为参数,并接收字符串值。但我不知道解决方案是什么?
以下代码片段只是尝试运行此命令;
self.buttonGroup.addButton(self.ui.m001)
x number of times:
num = 0 range_ = 10 prefix = "m" for i in range (range_): if num <(range_-1): numString = "00"+str(num) if (num >9): numString = "0"+str(num) button = "self.ui."+prefix+numString self.buttonGroup.addButton(button) num +=1 print self.buttonGroup
根据您提供的代码和描述,似乎您希望动态地为一个按钮组添加多个按钮。问题的关键在于 self.ui.m001 是一个具体的对象(如按钮),而 button = "self.ui."+prefix+numString 是一个字符串("self.ui.m001"),这两个不能直接互换。
self.ui.m001
button = "self.ui."+prefix+numString
"self.ui.m001"
您正在将按钮的名称作为字符串处理,但实际上应该是访问对象实例。Python 中的 eval() 或 getattr() 函数可以帮助您动态地获取对象。
eval()
getattr()
使用 getattr() 来访问 self.ui 中的属性,而不是将其作为字符串拼接。getattr() 允许您通过属性名字符串动态地获取属性。
self.ui
以下是修改后的代码:
num = 0 range_ = 10 prefix = "m" for i in range(range_): if num < (range_ - 1): numString = "00" + str(num) if num > 9: numString = "0" + str(num) # 动态构建属性名 button_name = prefix + numString # 使用getattr获取实际的按钮对象 button = getattr(self.ui, button_name) # 将按钮添加到按钮组 self.buttonGroup.addButton(button) num += 1 print(self.buttonGroup)
button_name = prefix + numString 会根据 num 的值动态生成按钮的名称(如 m001,m002,等等)。
button_name = prefix + numString
num
m001
m002
使用 getattr() 获取对象:
button = getattr(self.ui, button_name)
button_name
getattr() 的第二个参数是可选的,如果未找到该属性,它将抛出 AttributeError。但在这个示例中,我们假设 self.ui 中确实有这些按钮。
AttributeError
添加按钮到按钮组:
self.buttonGroup.addButton(button)
python button = getattr(self.ui, button_name, None) if button: self.buttonGroup.addButton(button)
这样就可以正确地动态地访问和使用对象,而不是字符串。