Как найти объект по имени в 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()}')