Как найти объект по имени в pyqt?

У меня есть список словарей:

globalParams = [{'attr':'enabled','ctrl':'checkBoxEnabled','type':'checkBox'},
                {'attr':'colorMode','ctrl':'comboBoxColorMode','type':'comboBox'}]

'ctrl' - имя элемента управления в окне Qt.

как правило, код выглядит следующим образом:

self.checkBoxEnabled.checkState()

но checkBoxEnabled - это объект. и у меня есть только строковое имя 'checkBoxEnabled' и не могу его использовать...

как найти объект по имени в pyqt? что-то вроде? самостоятельно.GetObjectByName ('checkBoxEnabled').checkState ()

1 ответ

Решение

Ты можешь использовать QObject::findChild метод. В pyqt это должно быть написано так:

checkbox = self.findChild(QtGui.QCheckBox, "checkBoxEnabled")

self должен быть родительским виджетом флажка.

Чтобы найти все элементы QCheckBox в пользовательском интерфейсе, вы можете запустить цикл по всем дочерним элементам виджета, как показано ниже:

from PyQt5.QtWidgets import QCheckBox
from PyQt5.QtCore import QObject

class Mainwindow(QMainWindow):
    def __init__(self):
        # super().__init__()
        self.checkbox = QCheckBox(self)
        self.checkbox_1 = QCheckBox(self)

        for checkstate in self.findChildren(QCheckBox):
            print(f'get check state:{checkstate.checkState()}')

Другие вопросы по тегам