Вопрос или проблема
У меня есть проблема с созданием зависимых выпадающих списков на основе значений словаря. Я совершенно нов в 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())
Пояснение к коду:
-
Импорт библиотек: Мы начинаем с импорта необходимых библиотек из PyQt6.
-
Словарь: В
data_dict
содержатся ключи и их соответствующие значения. -
Класс
DependentDropdowns
: В этом классе происходит основное оформление интерфейса приложения:- Создание двух выпадающих списков (
QComboBox
). - Связывание события изменения первого выпадающего списка с методом
update_second_dropdown
для обновления второго.
- Создание двух выпадающих списков (
-
Метод
update_second_dropdown
: Этот метод:- Получает выбранный элемент из первого выпадающего списка.
- Очищает и заполняет второй выпадающий список значениями из словаря, основанными на выбранном элементе первого списка.
- Обновляет метку для отображения выбранных значений.
- Запуск приложения: Стандартный код для запуска PyQt приложения.
Как это работает:
- Когда пользователь выбирает элемент из первого выпадающего списка (
one
,two
,three
), второй выпадающий список автоматически обновляется, показывая соответствующие значения изdata_dict
.
Надеюсь, это поможет вам в создании вашего приложения с зависимыми выпадающими списками! Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь спрашивать.