在PyQt中使用属性列表

时间:2019-04-23 20:26:41

标签: python pyqt4

我目前正在使用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> 

然后我的问题是我如何才能以这种方式使用属性列表?

1 个答案:

答案 0 :(得分:0)

b在您要调用的上下文中已经是QTextEdit类型的对象,而且,它是该上下文中的局部变量,而不是类属性,因此self.b调用是无用的,并产生该错误。

suivant也一样。

尝试将setTabOrder的呼叫更改为:

self.centralwidget.setTabOrder(b, suivant)

P.S。您应该真正使用QObject.findChildren()方法。