Как создать объект (класс, экземпляр, кнопку в gui) с заранее неизвестным именем в Python, PyQt? Скрипт вытягивает из другого файла некоторые данные, заранее неизвестные.
и делает из них словарь по типу:
info = {date: {finished: {id : time}}}
хотелось бы в PyQt сделать отдельную кнопку для каждой даты (количество их заранее не известно)
при нажатии на которую показывались другие детали
Подскажите пожалуйста как ето можно сделать? Ето как то нужно динамически задавать имена кнопок. И как то к ним нужно обращаться после
пс и еще второй вопрос, как то можно подобные данные записать не в словаре а в классе или экземпляре

21 Авг 2019 в 07:08
190 +1
0
Ответы
1

Для создания объектов (кнопок) с заранее неизвестными именами в PyQt вы можете использовать словарь, где ключами будут имена кнопок, а значениями сами объекты кнопок.

Пример создания кнопок с динамическими именами и их обработчиками:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
class MyWidget(QWidget):
def __init__(self, data):
super().__init__()
layout = QVBoxLayout(self)
self.buttons = {}
for date, info in data.items():
button = QPushButton(date)
button.clicked.connect(lambda _, date=date: self.show_details(date))
self.buttons[date] = info
layout.addWidget(button)
def show_details(self, date):
print(self.buttons[date]) # Здесь можно реализовать вывод дополнительных деталей
if __name__ == '__main__':
app = QApplication(sys.argv)
data = {
'2022-01-01': {'finished': {1: '10:00', 2: '11:00'}},
'2022-02-01': {'finished': {3: '12:00', 4: '13:00'}}
}
window = MyWidget(data)
window.show()
sys.exit(app.exec_())

Чтобы данные хранились не в словаре, а в классе или экземпляре, можно создать отдельный класс или использовать атрибуты класса/экземпляра для хранения данных. Например:

class DataHolder:
def __init__(self):
self.info = {}
def add_data(self, date, finished_info):
self.info[date] = finished_info
def get_data(self):
return self.info
class MyWidget(QWidget):
def __init__(self, data_holder):
super().__init__()
layout = QVBoxLayout(self)
self.data_holder = data_holder
for date, info in self.data_holder.get_data().items():
button = QPushButton(date)
button.clicked.connect(lambda _, date=date: self.show_details(date))
layout.addWidget(button)
def show_details(self, date):
print(self.data_holder.get_data()[date]) # Здесь можно реализовать вывод дополнительных деталей
if __name__ == '__main__':
app = QApplication(sys.argv)
data_holder = DataHolder()
data_holder.add_data('2022-01-01', {'finished': {1: '10:00', 2: '11:00'}})
data_holder.add_data('2022-02-01', {'finished': {3: '12:00', 4: '13:00'}})
window = MyWidget(data_holder)
window.show()
sys.exit(app.exec_())

Таким образом, вы можете динамически создавать кнопки с разными именами и связывать их с различными обработчиками, а также хранить данные в отдельном классе или экземпляре.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 91 947 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир