Python Qt6 – зависимые выпадающие списки с значениями, основанными на словаре

Вопрос или проблема

У меня есть проблема с созданием зависимых выпадающих списков на основе значений словаря. Я совершенно нов в Python, но имею опыт работы с SAS, SQL, VBA и немного HTML. Мне удалось импортировать таблицу Excel в Python, и когда я ее печатаю, она выглядит так:

{‘one’:[‘Blue’, ‘Green’],’two’:[‘Green’,’Red’],’three’:[‘Orange’]}

Что я пытаюсь сделать, так это превратить это в два выпадающих списка, первый из которых имеет следующие варианты:

one
two
three

А затем связанные значения заполняют второй выпадающий список. Например, если выбрано “two”, я хочу, чтобы “Green” и “Red” были доступными вариантами.

Я использую Python 3.12, pandas и Qt6 для этого.

Я пытался искать в интернете в течение нескольких дней и, к сожалению, постоянно сталкиваюсь с различными ошибками. Я не могу опубликовать код, который я использую, так как это работа, и он является конфиденциальным (на самом деле я работаю из дома и публикую этот вопрос со своего домашнего ПК, так как моя работа блокирует большинство сайтов). Мне удалось поместить ключ в первый выпадающий список, но это все, чего я смог достичь. Я понимаю, что без кода будет трудно дать полный ответ, надеюсь, что если кто-то знает базовый способ использования этого словаря для решения данной проблемы, я смогу использовать это в своем существующем коде.

Спасибо за ваше время.

Ответ или решение

Конечно! Давайте создадим простой пример с зависимыми выпадающими списками (dropdowns) в PyQt6, используя ваш словарь для заполнения значений. Мы создадим два выпадающих списка: первый будет содержать ключи словаря, а второй будет заполняться значениями на основе выбранного ключа.

Вот полный код:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QComboBox, QLabel

# Словарь с зависимыми значениями
data_dict = {
    'one': ['Blue', 'Green'],
    'two': ['Green', 'Red'],
    'three': ['Orange']
}

class DependentDropdowns(QWidget):
    def __init__(self):
        super().__init__()

        # Установка интерфейса
        self.setWindowTitle('Зависимые выпадающие списки')
        layout = QVBoxLayout()

        # Первый выпадающий список
        self.first_dropdown = QComboBox()
        self.first_dropdown.addItems(data_dict.keys())
        self.first_dropdown.currentIndexChanged.connect(self.update_second_dropdown)

        # Второй выпадающий список
        self.second_dropdown = QComboBox()

        # Метка для отображаемого результата
        self.label = QLabel('Выбранные значения:')

        # Добавление виджетов на макет
        layout.addWidget(self.first_dropdown)
        layout.addWidget(self.second_dropdown)
        layout.addWidget(self.label)

        self.setLayout(layout)

        # Инициализация второго выпадающего списка
        self.update_second_dropdown()

    def update_second_dropdown(self):
        # Получение выбранного ключа из первого выпадающего списка
        selected_key = self.first_dropdown.currentText()

        # Обновление второго выпадающего списка в соответствии с выбранным ключом
        self.second_dropdown.clear()  # Очистка предыдущих значений
        self.second_dropdown.addItems(data_dict.get(selected_key, []))  # Добавление новых значений

        # Обновление метки с выбранными значениями
        self.label.setText(f'Выбранные значения: {selected_key}, {self.second_dropdown.currentText()}')

# Запуск приложения
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DependentDropdowns()
    window.show()
    sys.exit(app.exec())

Пояснение к коду:

  1. Импорт библиотек: Мы начинаем с импорта необходимых библиотек из PyQt6.

  2. Словарь: В data_dict содержатся ключи и их соответствующие значения.

  3. Класс DependentDropdowns: В этом классе происходит основное оформление интерфейса приложения:

    • Создание двух выпадающих списков (QComboBox).
    • Связывание события изменения первого выпадающего списка с методом update_second_dropdown для обновления второго.
  4. Метод update_second_dropdown: Этот метод:

    • Получает выбранный элемент из первого выпадающего списка.
    • Очищает и заполняет второй выпадающий список значениями из словаря, основанными на выбранном элементе первого списка.
    • Обновляет метку для отображения выбранных значений.
  5. Запуск приложения: Стандартный код для запуска PyQt приложения.

Как это работает:

  • Когда пользователь выбирает элемент из первого выпадающего списка (one, two, three), второй выпадающий список автоматически обновляется, показывая соответствующие значения из data_dict.

Надеюсь, это поможет вам в создании вашего приложения с зависимыми выпадающими списками! Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь спрашивать.

Оцените материал
Добавить комментарий

Капча загружается...