我目前正在使用pyqt4制作数独gui,在尝试遍历mainwindow对象的属性时遇到了问题。
所以基本上,我想使用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)
但是我有很多文本框需要浏览,所以我想使用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>
然后我的问题是我如何才能以这种方式使用属性列表?
答案 0 :(得分:0)
b
在您要调用的上下文中已经是QTextEdit
类型的对象,而且,它是该上下文中的局部变量,而不是类属性,因此self.b
调用是无用的,并产生该错误。
suivant
也一样。
尝试将setTabOrder
的呼叫更改为:
self.centralwidget.setTabOrder(b, suivant)
P.S。您应该真正使用QObject.findChildren()
方法。