我正在使用pyqt4来制作一个数独的gui,我在尝试迭代主窗口对象的属性时遇到了问题。
所以基本上,我想使用setTabOrder方法,所以我应该这样应用它:
self.setTabOrder(self.textboxA, self.textboxB)
self.setTabOrder(self.textboxB, self.textboxC)
self.setTabOrder(self.textboxC, self.textboxD)
我已经完成了这个(它完全正常工作)
self.centralwidget.setTabOrder(self.case0_0, self.case0_1)
但我有一个文本框的loooooot,所以我想使用vars()函数迭代它们,如下所示:
for a, b in vars(self).items():
if type(b) == QtGui.QTextEdit and a != 'case8_8':
name = list(a)
if a[6] != '8':
name[6] = str(int(a[6])+1)
else:
name[4] = str(int(a[4])+1)
name[6] = '0'
name = ''.join(name)
suivant = vars(self)[name]
self.centralwidget.setTabOrder(self.b, self.suivant)
它不起作用,并给我这个错误:
AttributeError: 'Ui_MainWindow' object has no attribute 'b'
b显然指向与case0_0相同的对象(我打印它以确保):
<PyQt4.QtGui.QTextEdit object at 0x000001F5043DC708>
<PyQt4.QtGui.QTextEdit object at 0x000001F5043DC708>
那么我的问题是如何以这种方式使用属性列表?
b
已经是你试图称之为上下文的QTextEdit
类型的对象,而且,它是该上下文中的局部变量,而不是类属性,因此self.b
调用是无用的并产生该错误。
同样适用于suivant
。
尝试将setTabOrder
调用更改为:
self.centralwidget.setTabOrder(b, suivant)
附:你应该真的使用QObject.findChildren()
方法。