Qcombobox pyqt5 как получить значение
Шаг 132.
Библиотека PyQt5. Списки и таблицы. Раскрывающийся список. Добавление, изменение и удаление элементов
На этом шаге мы методы, используемые для выполнения указанных операций .
addItem () — добавляет один элемент в конец списка. Форматы метода:
addItem(Строка>[, Данные>]) addItem(, Строка>[, Данные>])
insertItem(Индекс>, Строка>[, Данные>]) insertItem(Индекс>, , Строка>[, Данные>])
В заключение приведем небольшой пример, иллюстрирующий использование некоторых из перечисленных методов.
Рис.1. Результат работы приложения
# -*- coding: utf-8 -*- from PyQt5 import QtWidgets import sys # Обработчик нажатия первой кнопки def on_clicked1(): cbox.addItem(ledit.text()) ledit.clear() # Очистка строки # Обработчик нажатия второй кнопки def on_clicked2(): n = cbox.currentIndex() # Номер текущего элемента cbox.removeItem(n) # Удалить элемент с указанным номером app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.setWindowTitle("Пример использования QComboBox") # Создание компонентов cbox = QtWidgets.QComboBox() ledit = QtWidgets.QLineEdit() label1 = QtWidgets.QLabel("Список") label2 = QtWidgets.QLabel("Строка для ввода") # Создание кнопок и назначение обработчиков button1 = QtWidgets.QPushButton("Добавить в список") button1.clicked.connect(on_clicked1) button2 = QtWidgets.QPushButton("Удалить текущий элемент") button2.clicked.connect(on_clicked2) # Помещение компонентов в контейнеры vbox1 = QtWidgets.QVBoxLayout() vbox1.addWidget(label1) vbox1.addWidget(cbox) vbox2 = QtWidgets.QVBoxLayout() vbox2.addWidget(label2) vbox2.addWidget(ledit) # Размещение компонентов и контейнеров по сетке grid = QtWidgets.QGridLayout() grid.addLayout(vbox1, 0, 0) grid.addWidget(button1, 0, 1) grid.addLayout(vbox2, 1, 0) grid.addWidget(button2, 1, 1) # Добавление сетки в окно и показ окна window.setLayout(grid) window.resize(300,150) window.show() sys.exit(app.exec_())
Архив с файлом можно взять здесь.
На следующем шаге мы рассмотрим изменение параметров списка .
Виджеты в PyQt5 (часть 2)

Мы обсудим QPixmap, QLineEdit, QSplitter и QComboBox.
QPixMap
QPixMap – это один из виджетов, использующихся для работы с изображениями. Он оптимизирован для показа изображений на экране. В приведенном ниже примере, мы будем использовать QPixMap для того, чтобы показать изображение в окне.
В нашем примере, мы показываем изображение в окне.
Мы создали объект QPixMap.
Мы поместили изображение в виджет QLabel.
QLineEdit
QLineEdit – это виджет, который разрешает вводить и редактировать одну строку текста. Для этого виджета доступны функции «Отменить» и «Повторить», «Вырезать» и «Вставить», а также функция «перетаскивания».
Этот пример показывает виджет строки редактирования и метку. Текст, который мы вбиваем в строку редактирования, немедленно отображается в виджете метки.
Создается виджет QLineEdit.
Если текст в виджете редактирования строки меняется, мы вызываем метод onChanged().
Внутри метода onChanged, мы устанавливаем напечатанный текст в виджет метки. Мы вызываем метод adjustSize(), чтобы менять размер метки соответственно длине текста.
QSplitter
QSplitter позволяет пользователю контролировать размер виджетов путём перетаскивания границы между ними. В нашем примере, мы показываем три виджета QFrame, организованные с двумя разделителями.
В нашем примере, мы имеем три виджета фрейма и два разделителя. Обратите внимание, что в некоторых темах оформления, разделители могут не быть хорошо видимыми.
Для того, чтобы видеть границы между виджетами QFrame, мы используем стилизованный фрейм.
Мы создаём виджет QSplitter и добавляем в него два виджета.
К тому же, мы можем добавить разделитель к ещё одному виджету разделителя.
QComboBox
QComboBox – это виджет, который позволяет пользователю выбирать из списка вариантов (выпадающий список).
Пример показывает QComboBox и QLabel. Блок со списком имеет список из пяти вариантов. Это имена дистрибутивов Linux. Виджет метки показывает выбранный вариант.
Мы создаём виджет QComboBox с пятью вариантами.
После выбора пункта, мы вызываем метод onActivated().
Внутри метода, мы устанавливаем текст выбранного пункта в виджет метки. Мы приспосабливаем размер метки, как в прошлом примере.
В этой части руководства PyQt5, мы рассмотрели другие четыре виджета PyQt5.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Python-сообщество
![]()
- Начало
- » GUI
- » pyqt5 получить значение QComboBox
#1 Авг. 1, 2020 12:36:52
Pacifist Зарегистрирован: 2020-01-10 Сообщения: 25 Репутация: 0 Профиль Отправить e-mail
pyqt5 получить значение QComboBox
Как в label получить значение из comboBox (словаря)? При выборе в comboBox Яблоко - в label должно быть 5
import sys from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(509, 137) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.comboBox = QtWidgets.QComboBox(self.centralwidget) self.comboBox.setGeometry(QtCore.QRect(40, 50, 171, 22)) self.comboBox.setObjectName("comboBox") self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(320, 50, 121, 21)) self.label.setStyleSheet("background-color: rgb(110, 166, 255);") self.label.setText("") self.label.setObjectName("label") MainWindow.setCentralWidget(self.centralwidget) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) list_name = 'Яблоко': 5, 'Дыня': 6, 'Груша': 7, 'Вишня': 9> class Proba(QtWidgets.QMainWindow): def __init__(self): super(Proba, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.comboBox.addItems(list_name) value = self.ui.comboBox.currentData() self.ui.label.setText(str(value)) app = QtWidgets.QApplication([]) application = Proba() application.show() sys.exit(app.exec())
#2 Авг. 1, 2020 13:36:56
rami Зарегистрирован: 2018-01-08 Сообщения: 279 Репутация: 71 Профиль Отправить e-mail
pyqt5 получить значение QComboBox
class Proba(QtWidgets.QMainWindow): def __init__(self): super(Proba, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.comboBox.addItems(list_name) self.ui.comboBox.currentIndexChanged[str].connect(self.text_to_label) def text_to_label(self, item_selected): self.ui.label.setText(str(list_name[item_selected]))
Остальное как у вас.
Qcombobox pyqt5 как получить значение
На этом шаге рассмотрим класс QComboBox.
Класс QComboBox предоставляет пользователю возможность выбора одного элемента из нескольких. Его функциональное назначение совпадает с виджетом простого списка QListWidget. Основное преимущество выпадающего списка состоит в отображении только одного (выбранного) элемента, благодаря чему для его размещения не требуется много места. Отображение всего списка (раскрытие) происходит только на некоторый промежуток времени, чтобы пользователь мог сделать выбор, а затем список возвращается в свое исходное состояние (сворачивается).
В качестве элемента можно добавить текст и/или картинку. Для этого служит метод addItem(). Можно добавить сразу несколько текстовых элементов, передав указатель на объект класса QStringList в метод addItems().
Вызвав метод setDuplicatesEnabled(false), можно включить режим, исключающий повторяющиеся элементы из списка. Если необходимо удалить все элементы выпадающего списка, тогда вызывается слот clear().
Чтобы узнать, какой из элементов является текущим, нужно вызывать метод currentIndex(), который возвратит его порядковый номер.
Можно сделать так, чтобы пользователь мог сам добавлять элементы в список. Типичным примером этого является адресная строка Проводника ОС Windows, содержащая в себе список просмотренных адресов (ссылок). Для установки виджета в этот режим вызывается метод setEditable() с параметром true. После того как пользователь изменил текст выбранного элемента, отправляется сигнал editTextChanged(const QString&), и новый элемент добавляется в список.
После выбора элемента отправляются сразу два сигнала activated() — один с параметром типа int (индексом выбранного элемента), а другой с параметром типа const QString& (его значением). Эти сигналы отправляются, даже если пользователь выбрал ранее выбранный элемент; для информирования о реальном изменении служат два сигнала currentIndexChanged(), также отправляемые с параметрами int и const QString& каждый.
Пример, приведенный на рис. 1, демонстрирует виджет выпадающего списка. При изменении элемента список дополнится новым элементом.
Рис.1. Пример выпадающего списка
Рассмотрим текст приложения:
QComboBox cb; QStringList lst; lst cb.addItems(lst); cb.setEditable(true); cb.show();
Файлы приложения можно взять здесь.
Пример, приведенный на рис. 2, демонстрирует виджет выпадающего списка, в качестве элементов используются растровые изображения и текст.
Рис.2. Пример выпадающего списка с картинками
Рассмотрим текст приложения:
QComboBox cb; QStringList lst; lst foreach(QString str, lst) < cb.addItem(QIcon(str+".jpg"),str, Qt::UserRole); > cb.setIconSize(QSize(60,60)); cb.show();
Файлы приложения можно взять здесь.
Пример, приведенный на рис. 3, демонстрирует применение сигнала activated(int) выпадающего списка. В примере требуется ввести два числа и выбрать из списка действие над ними.
Рис.3. Пример использования выпадающего списка
Для реализации этого приложения описали следующий класс:
class cb:public QWidget < Q_OBJECT private: QStringList lst; QLabel *l,*l1,*l2; QLineEdit *a,*b; QComboBox *cbox; FileNameValidator *pnameValidator1,*pnameValidator2; public: cb(QWidget *parent=0); private slots: void schet(); >;
Конструктор реализован следующим образом:
cbox=new QComboBox(); l=new QLabel("Результат: "); l1=new QLabel("Введите первое число: "); l2=new QLabel("Введите второе число: "); a=new QLineEdit("10"); pnameValidator1 = new FileNameValidator(a); a->setValidator(pnameValidator1); l1->setBuddy(a); b=new QLineEdit("2"); pnameValidator2 = new FileNameValidator(b); b->setValidator(pnameValidator2); l2->setBuddy(b); lst cbox->addItems(lst); cbox->setCurrentIndex(0); float ax,bx,res; ax=a->text().toFloat(); bx=b->text().toFloat(); res=ax+bx; l->setText(l->text()+QString::number(res)); connect(cbox,SIGNAL(activated(int)),this,SLOT(schet())); connect(a,SIGNAL(textChanged(QString)),this,SLOT(schet())); connect(b,SIGNAL(textChanged(QString)),this,SLOT(schet())); QVBoxLayout *phbl1=new QVBoxLayout; phbl1->setMargin(5); phbl1->setSpacing(15); phbl1->addWidget(l1); phbl1->addWidget(a); phbl1->addWidget(l2); phbl1->addWidget(b); phbl1->addWidget(l); QHBoxLayout *pvbl=new QHBoxLayout; pvbl->setMargin(5); pvbl->setSpacing(15); pvbl->addWidget(cbox); pvbl->addLayout(phbl1); setLayout(pvbl);
Слот schet() выполняет с введенными числами выбранное в списке действие:
l->setText("Результат: "); if((a->text()!="")&&(b->text()!="")) < float ax,bx,res; ax=a->text().toFloat(); bx=b->text().toFloat(); if(cbox->currentIndex()==0) < res=ax+bx; l->setText(l->text()+QString::number(res)); > else if(cbox->currentIndex()==1) < res=ax-bx; l->setText(l->text()+QString::number(res)); > else if(cbox->currentIndex()==2) < res=ax*bx; l->setText(l->text()+QString::number(res)); > else < if(bx!=0) < res=ax/bx; l->setText(l->text()+QString::number(res)); > else l->setText(l->text()+" Делить на 0 нельзя"); > >
Защита от неверного ввода реализована следующим классом:
class FileNameValidator : public QValidator < public: FileNameValidator(QObject* parent) : QValidator(parent) < >virtual State validate(QString& str, int& pos) const < QRegExp rxp = QRegExp("[^0-9.]"); if (str.contains(rxp)) < return Invalid; >else return Acceptable; > >;
Файлы приложения можно взять здесь.
На следующем шаге рассмотрим класс QTabWidget.