使用PyQt中的属性列表

问题描述 投票:1回答:1

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

那么我的问题是如何以这种方式使用属性列表?

python pyqt4
1个回答
0
投票

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

同样适用于suivant

尝试将setTabOrder调用更改为:

self.centralwidget.setTabOrder(b, suivant)

附:你应该真的使用QObject.findChildren()方法。

© www.soinside.com 2019 - 2024. All rights reserved.