Как использовать переменную для обращения к виджетам по порядковому номеру?
Пишу свой первый проект на Python + PyQt столкнулся с такой проблемой:
def comboBox_add_data(self):
""" функция добавления данных полей чек бокса
:return:
"""
cb_num = "1"
for i in range(62):
self.comboBox_window.comboBox_[cb_num].addItem("")
self.comboBox_window.comboBox_[cb_num].setItemText(i, str(cb_list[i]))
в ответ получаю:
AttributeError: 'QMainWindow' object has no attribute 'comboBox_'
Если писать так, то все работает:
self.comboBox_window.comboBox_1.addItem("")
self.comboBox_window.comboBox_1.setItemText(i, str(cb_list[i]))
main.py:
from PyQt6.QtWidgets import QApplication, QWidget
from PyQt6 import uic
import sys
cb_list = ['null', 'ВРЕМЯ', 'ЗАПРС', 'ВЗН1', 'ВЗН2', 'ВЗС1', 'ВЗС2',
'ВЗП1', 'ВЗП2', 'ВВН1', 'ВВН2', 'ВВС1', 'ВВС2']
class App(QWidget):
def __init__(self):
QWidget.__init__(self)
self.comboBox_window = uic.loadUi('comboBox.ui')
self.set()
def set(self):
self.comboBox_window.show()
self.comboBox_add_data()
def comboBox_add_data(self):
"""
функция добавления данных в поля чекбокса
:return:
"""
cb_num = "1"
for i in range(62):
self.comboBox_window.comboBox_1.addItem("")
self.comboBox_window.comboBox_1.setItemText(i, str(cb_list[i]))
self.comboBox_window.comboBox_2.addItem("")
self.comboBox_window.comboBox_2.setItemText(i, str(cb_list[i]))
######## вместо перечисления всех чекбоксов хотел бы использовать переменную равную порядковому номеру#####
# self.comboBox_window.comboBox_[cb_num].addItem("") # cb_num = "1"
# self.comboBox_window.comboBox_[cb_num].setItemText(i, str(cb_list[i])) # cb_num = "1"
# self.comboBox_window.comboBox_[cb_num].addItem("") # cb_num = "2"
# self.comboBox_window.comboBox_[cb_num].setItemText(i, str(cb_list[i])) # cb_num = "2"
# ......
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = App()
app.exec()
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import sys
'''
from PyQt6.QtWidgets import QApplication, QWidget # PyQt6
from PyQt6 import uic
'''
from PyQt5 import QtCore, QtGui, QtWidgets # PyQt5
from PyQt5.Qt import *
class MainWindow(QWidget):
def __init__(self):
super().__init__()
# ??? self.comboBox_window = uic.loadUi('comboBox.ui') # ??? comboBox.ui
cb_list = [
'null', 'ВРЕМЯ', 'ЗАПРС', 'ВЗН1', 'ВЗН2', 'ВЗС1', 'ВЗС2',
'ВЗП1', 'ВЗП2', 'ВВН1', 'ВВН2', 'ВВС1', 'ВВС2'
]
many_cb = 62
column = 9
layout = QGridLayout(self)
for step in range(many_cb):
comboBox = QComboBox(objectName=f'comboBox_{step}')
comboBox.addItems(cb_list)
comboBox.activated.connect(
lambda ind, cb=comboBox: self.comboBox_activate(ind, cb))
row = step // column
col = step % column
layout.addWidget(comboBox, row, col)
def comboBox_activate(self, index, comboBox):
print(f'\n{comboBox.objectName()} \nindex={index}; text={comboBox.currentText()}') #
if __name__ == "__main__":
app = QApplication(sys.argv)
w = MainWindow()
w.show()
app.exit(app.exec())
