Использование списка атрибутов в PyQt - PullRequest
1 голос
/ 23 апреля 2019

В настоящее время я использую pyqt4 для создания графического интерфейса sudoku, и я столкнулся с проблемой при попытке перебрать атрибуты объекта 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)

но у меня есть 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> 

Тогда мой вопрос: как я могу использовать список атрибутов таким образом?

1 Ответ

0 голосов
/ 24 апреля 2019

b уже является объектом типа QTextEdit в контексте, который вы пытаетесь вызвать, также это локальная переменная в этом контексте, а не атрибут класса, так что вызов self.b бесполезен и производит это ошибка.

То же самое относится к suivant.

Попробуйте изменить этот setTabOrder вызов на:

self.centralwidget.setTabOrder(b, suivant)

P.S. Вы должны действительно использовать QObject.findChildren() метод.

...