Объединение нескольких виджетов PyQT5 в одну группу, автоматизация работы с ними, Python3
Есть блок кода, в котором огромное количество схожих по названию переменных, используемых при работе с PyQT5 GUI, хотелось бы автоматизировать работу с ними, а именно найти способ группировать их, либо же засунуть в отдельный модуль, чтобы редактировать названия переменных было проще.
self.Yaroslavl_label_ff = QLabel(self)
self.Yaroslavl_label_ff.setFont(QFont('Arial', 14))
self.Yaroslavl_label_ff.setGeometry(-15, 15, 200, 200)
#Create Label name
self.Yaroslavl_label_name = QLabel(self)
self.Yaroslavl_label_name.setText('Ярославль')
self.Yaroslavl_label_name.setFont(QFont('Arial', 10))
self.Yaroslavl_label_name.setStyleSheet('font: bold; color: blue')
self.Yaroslavl_label_name.setGeometry(15, 35, 150, 15)
self.Yaroslavl_label_name.setAlignment(Qt.AlignCenter)
#Create label Ch
self.Yaroslavl_label_Ch = QLabel(self)
self.Yaroslavl_label_Ch.setFont(QFont('Arial', 10))
self.Yaroslavl_label_Ch.setGeometry(70, 30, 30, 30)
#Create label TTT
self.Yaroslavl_label_TTT = QLabel(self)
self.Yaroslavl_label_TTT.setFont(QFont('Arial', 10))
self.Yaroslavl_label_TTT.setGeometry(35, 80, 100, 15)
Это лишь малая часть кода, и, как правило, Yaroslavl меняется на другие города в нескольких блоках кода. Есть ли возможность заменить нудный процесс копипасты на что-то более простое и быстрое? Заранее спасибо :)
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
Например, создайте словарь с городами-ключами и со списками-значениями:
self.labels = {}
for city in ['Ярославль', 'Москва', 'Нью-Йорк']:
ff = QLabel(self)
ff.setFont(QFont('Arial', 14))
ff.setGeometry(-15, 15, 200, 200)
#Create Label name
name = QLabel(self)
name.setText(city)
name.setFont(QFont('Arial', 10))
name.setStyleSheet('font: bold; color: blue')
name.setGeometry(15, 35, 150, 15)
name.setAlignment(Qt.AlignCenter)
#Create label Ch
Ch = QLabel(self)
Ch.setFont(QFont('Arial', 10))
Ch.setGeometry(70, 30, 30, 30)
#Create label TTT
TTT = QLabel(self)
TTT.setFont(QFont('Arial', 10))
TTT.setGeometry(35, 80, 100, 15)
self.labels[city] = [ff, name, Ch, TTT]