Combo Box. Selected Index Свойство
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает или задает индекс, указывающий текущий выделенный элемент.
public: virtual property int SelectedIndex < int get(); void set(int value); >;
[System.ComponentModel.Browsable(false)] public override int SelectedIndex
[] member this.SelectedIndex : int with get, set
Public Overrides Property SelectedIndex As Integer
Значение свойства
Индекс текущего выделенного элемента (индексация ведется с нуля). Если элемент не выбран, возвращается отрицательное значение (-1).
Исключения
Указанный индекс меньше или равен -2.
Указанный индекс больше или равен числу элементов в поле со списком.
Примеры
В следующем примере кода показано, как использовать FindString метод и SelectedIndex свойство . Этот пример является частью полного примера в обзоре ComboBox класса.
void findButton_Click( Object^ sender, System::EventArgs^ e ) < int index = comboBox1->FindString( textBox2->Text ); comboBox1->SelectedIndex = index; >
private void findButton_Click(object sender, System.EventArgs e)
Private Sub findButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim index As Integer index = comboBox1.FindString(textBox2.Text) comboBox1.SelectedIndex = index End Sub
Комментарии
Это свойство указывает отсчитываемый от нуля индекс текущего выбранного элемента в списке полей со списком. При задании нового индекса возникает SelectedIndexChanged событие .
- Если FormattingEnabled имеет значение false , SelectedIndex не будет иметь значение -1, если SelectedValue значение пусто.
- Если FormattingEnabled имеет значение true , SelectedIndex будет задано значение -1, если SelectedValue значение пусто.
Чтобы отменить выбор выбранного элемента, задайте для параметра SelectedIndex значение -1. Для элемента нельзя задать SelectedIndexComboBox значение -1, если элемент является элементом с привязкой к данным.
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]))
Остальное как у вас.
Как получить значение из combobox python
Виджет Combobox представляет выпадающий список, из которого пользователь может выбрать один элемент. Фактически он представляет комбинацию виджетов Entry и Listbox.
Основные параметры конструктора Combobox:
- values : список строк для отображения в Combobox
- background : фоновый цвет
- cursor : курсор указателя мыши при наведении на текстовое поле
- foreground : цвет текста
- font : шрифт текста
- justify : устанавливает выравнивание текста. Значение LEFT выравнивает текст по левому краю, CENTER — по центру, RIGHT — по правому краю
- show : задает маску для вводимых символов
- state : состояние элемента, может принимать значения NORMAL (по умолчанию) и DISABLED
- textvariable : устанавливает привязку к элементу StringVar
- height : высота элемента
- width : ширина элемента
Определим простейший выпадающий список:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") languages = ["Python", "C#", "Java", "JavaScript"] combobox = ttk.Combobox(values=languages) combobox.pack(anchor=NW, padx=6, pady=6) root.mainloop()
Здесь для элемента combobox в качестве источника значений устанавливается список languages:

С помощью параметра textvariable мы можем установить привязку к выбранному в Combobox значению:
from cProfile import label from cgitb import text from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") languages = ["Python", "C#", "Java", "JavaScript"] # по умолчанию будет выбран первый элемент из languages languages_var = StringVar(value=languages[0]) label = ttk.Label(textvariable=languages_var) label.pack(anchor=NW, padx=6, pady=6) combobox = ttk.Combobox(textvariable=languages_var, values=languages) combobox.pack(anchor=NW, padx=6, pady=6) print(combobox.get()) root.mainloop()
Здесь выбранный в Combobox элемент привязан к переменной languages_var. По умолчанию выбран первый элемент списка languages. Для отслеживания изменения выбора определена метка Label, которая отображает выбранный элемент:

По умолчанию мы можем ввести в текстовое поле в Combobox любое значение, даже то, которого нет в списке. Такое поведение не всегда может быть удобно. В этом случае мы можем установить для виджета состояние только для чтения, передав параметру «state» значение «readonly»:
combobox = ttk.Combobox(textvariable=languages_var, values=languages, state="readonly")
Выбранный элемент можно получить с помощью метода get() класса Combobox
selection = combobox.get()
либо с помощью метода get() привязанной переменной
selection = languages_var.get()
Для установки нового значения можно использовать метод set() :
languages_var.set(new_value) combobox.set(new_value)
Для установки по индексу из привязанного набора значений также можно использовать метод current(newindex) , где с помощью параметра newindex задается индекс выбранного значения. Например, выберем второй элемент:
combobox.current(1)
Отслеживание выбора значения
Для обработки выбора элементов в Combobox необходимо прикрепить функцию обработки к событию > с помощью метода bind :
combobox.bind(">", функция_обработки)
Например, динамически обработаем выбор в Combobox:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") def selected(event): # получаем выделенный элемент selection = combobox.get() print(selection) label["text"] = f"вы выбрали: " languages = ["Python", "C#", "Java", "JavaScript"] label = ttk.Label() label.pack(anchor=NW, fill=X, padx=5, pady=5) combobox = ttk.Combobox(values=languages, state="readonly") combobox.pack(anchor=NW, fill=X, padx=5, pady=5) combobox.bind(">", selected) root.mainloop()
В данном случае при изменении выбора в списке срабатывает функция selected . Функция должна принимать один параметр, который несет информацию о событии — здесь это параметр event. Хотя в данном случае он никак не используется.
В самой функции получаем выбранный элемент и выводит соответствующую информацию на метку Label.
Получить значение QComboBox из QTableWidget из другого метода, где строки таблицы создаются по нажатию кнопки и получить значение по адресу ячейки
У меня в таблице QTableWidget строки создаются по нажатию кнопки, где внутри ячейки помещаю QComboBox, и хочу получить значение QComboBox из другого метода. Проблема в том, что когда я создаю QComboBox в основном классе окна, у меня при клике не создается несколько QComboBox, а только в последней строке. А когда создаю внутри метода когда нажимаю кнопку могу создать несколько QComboBox, но не могу обратится к QComboBox по адресу ячейки в QTableWidget. Ниже я привел мой код, где строки и стоблцы создаются по клику на кнопку, где я пытался обратится через метод QTableWidget.cellWidget(1, 1), но у меня просто вылетает программа без TraceBack.
import sys from PyQt5 import QtWidgets from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout class MyWindow(QtWidgets.QMainWindow): def __init__(self, parent=None): super().__init__() self.centralWidget = QWidget() self.setCentralWidget(self.centralWidget) self.row_count = 1 self.table_index = 0 self.tableWidget = QtWidgets.QTableWidget() self.tableWidget.setRowCount(0) self.tableWidget.setColumnCount(2) self.button = QtWidgets.QPushButton('Добавить строки таблицы') self.button_1 = QtWidgets.QPushButton('Вывести значение ячейки') self.layout = QVBoxLayout(self.centralWidget) self.layout.addWidget(self.tableWidget) self.layout.addWidget(self.button) self.layout.addWidget(self.button_1) self.button.clicked.connect(self.add_cells) self.button_1.clicked.connect(self.print_cells) def add_cells(self): # метод для добавления строки и ячеек self.tableWidget.setRowCount(self.row_count) self.tableWidget.setItem(self.table_index, 0, QtWidgets.QTableWidgetItem('Nokia')) combobox = QtWidgets.QComboBox() # Создаю combobox combobox.addItem('Продано') combobox.addItem('В наличии') self.tableWidget.setCellWidget(self.table_index, 1, combobox) self.row_count += 1 self.table_index += 1 def print_cells(self): print(self.tableWidget.item(0, 0).text()) print(self.tableWidget.cellWidget(1, 1).text()) # Запрос значения из ComboBox (вылетает ошибка) if __name__ == '__main__': app = QApplication(sys.argv) w = MyWindow() w.show() sys.exit(app.exec_())
