Объединение нескольких виджетов PyQT5 в одну группу, автоматизация работы с ними, Python3

Рейтинг: 0Ответов: 1Опубликовано: 04.06.2023

Есть блок кода, в котором огромное количество схожих по названию переменных, используемых при работе с 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 меняется на другие города в нескольких блоках кода. Есть ли возможность заменить нудный процесс копипасты на что-то более простое и быстрое? Заранее спасибо :)

Ответы

▲ 0Принят

Например, создайте словарь с городами-ключами и со списками-значениями:

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]