Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
chupanoid
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 8
1

Pyqt5 listWidget+checkbox

12.03.2017, 18:56. Просмотров 1088. Ответов 6
Метки нет (Все метки)

Добрый день.
Помогите разобраться.
Создал лист с чекбоксами, заполнил его.
Повешал событие на него
При выборе значения, я отлавливаю индекс выбранного элемента.

Вопрос как получить индекс выбранного элемента нажатием на checkbox или как отловить событие при нажатие не на само значение в списке а на checkbox относящийся к этому значению.

Если что-то не понятно спрашивайте, попробую объяснить подробней...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2017, 18:56
Ответы с готовыми решениями:

Pyqt5 listWidget + bad Gugl
Приветствую! Проблема заключается в том, чтобы создать делегата в котором...

PyQt5
В чем проблема? Обычный код с сайта...

Комментарии к PyQT5
Доброго времени суток, сейчас занимаюсь изучением pyqt5 читаю документацию по...

многопоточность PyQt5
Помогите, пожалуйста, разобраться. В Python я совсем новичок. В скрипте...

Сборка PyQt5
Решил попробовать собрать PyQt5 по инструкции на сайте:...

6
Mess1an
0 / 0 / 0
Регистрация: 03.01.2015
Сообщений: 19
14.03.2017, 22:34 2
Не совсем понял, что требуется, но в примере ниже по нажатию на checkbox мы получаем текст и индекс выбранного элемента из combobox.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#! /usr/bin/python3
from PyQt5.QtWidgets import *
 
class App(QWidget):
    def __init__(self):
        super(App, self).__init__()
 
        self.combobox = QComboBox(self)
        self.combobox.move(10,10)
        self.combobox.addItems(['123','asd','zxc','qwe'])
 
        checkbox = QCheckBox(self)
        checkbox.move(100, 15)
        checkbox.stateChanged.connect(self.asd)
 
        self.setFixedSize(200, 100)
 
    def asd(self):
        box_text = self.combobox.currentText()
        box_id = self.combobox.currentIndex()
        print(box_text)
        print(box_id)
 
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    EX = App()
    EX.show()
    sys.exit(app.exec_())
Желательно показать пример и на вашем примере уже искать ошибку и править.
0
Avazart
Эксперт С++
7723 / 5632 / 549
Регистрация: 10.12.2010
Сообщений: 25,405
Записей в блоге: 17
14.03.2017, 22:53 3

Не по теме:

Mess1an, Для этих целей есть QListWidgetItem QT-шный аналог CheckListBox'а



Добавлено через 9 минут
Цитата Сообщение от chupanoid Посмотреть сообщение
Вопрос как получить индекс выбранного элемента нажатием на checkbox или как отловить событие при нажатие не на само значение в списке а на checkbox относящийся к этому значению.
Пробуйте использовать сигналы: http://doc.qt.io/qt-5/qlistwidget.html#signals
0
chupanoid
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 8
15.03.2017, 08:29  [ТС] 4
Тут я заполняю два listWidget
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    def create_lst_chekbox(self, cheked):
        item = QtWidgets.QListWidgetItem()
        item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
        if cheked:
            item.setCheckState(QtCore.Qt.Checked)
        else:
            item.setCheckState(QtCore.Qt.Unchecked)
        return item
 
    def load_list_elem(self):
        if self.first_config == None or self.second_config == None: return
 
        a2_firs_ae = DATABASE[self.cmbA2First.currentText()]['A3'][self.cmbA3Frist.currentText()]
        a2_second_ae = DATABASE[self.cmbA2Second.currentText()]['A3'][self.cmbA3Second.currentText()]
        #ELEM-LIST-1
        self.listWidget.clear()
        self.listWidget_2.clear()
        for q in self.first_config[a2_firs_ae]:
            if self.first_config[a2_firs_ae][q]['master'] == True:
                chkBox = self.create_lst_chekbox(True)
                self.listWidget.addItem(chkBox)
                chkBox.setText(q + '.MASTER')
 
            elif self.first_config[a2_firs_ae][q]['master'] == False:
                chkBox = self.create_lst_chekbox(False)
                self.listWidget.addItem(chkBox)
                chkBox.setText(q + '.BACKUP')
 
        # ELEM-LIST-2
        for n in self.second_config[a2_second_ae]:
            if self.second_config[a2_second_ae][n]['master'] == True:
                chkBox = self.create_lst_chekbox(True)
                self.listWidget_2.addItem(chkBox)
                chkBox.setText(q + '.MASTER')
 
            elif self.second_config[a2_second_ae][n]['master'] == False:
                chkBox = self.create_lst_chekbox(False)
                self.listWidget_2.addItem(chkBox)
                chkBox.setText(q + '.BACKUP')
Этот метод вызывается из метода выше для создания checkbox в listwidget.
Python
1
2
3
4
5
6
7
8
    def create_lst_chekbox(self, cheked):
        item = QtWidgets.QListWidgetItem()
        item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
        if cheked:
            item.setCheckState(QtCore.Qt.Checked)
        else:
            item.setCheckState(QtCore.Qt.Unchecked)
        return item
Тут я прикручиваю сигнал, возможно не тот который нуже но работает по нажатию на значение:
self.listWidget.currentItemChanged.connect(self.lstelems)

Метод обработки сигнала:
Python
1
2
3
    def lstelems(self):
        #  Получить индекс выбранного элемента
        print(self.listWidget.currentRow())
Что получается:
Pyqt5 listWidget+checkbox


Я не могу отловить сигнал на чекбоксе, пользователь может нажать на значение в листе или на чекбокс рядом со сзначением.
0
chupanoid
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 8
15.03.2017, 10:30  [ТС] 5
Вроде бы разобрался:
Поправил метод:
Python
1
2
3
    def lstelems(self, item):
        print(item.checkState())
        print(item.text())
Сейчас при нажатие на чекбок получаю статус чекбокса и текст значения
0
Avazart
Эксперт С++
7723 / 5632 / 549
Регистрация: 10.12.2010
Сообщений: 25,405
Записей в блоге: 17
15.03.2017, 12:30 6
Пробуйте
C++ (Qt)
1
2
void itemChanged(QListWidgetItem *item)
void itemClicked(QListWidgetItem *item)
И checkState()
1
chupanoid
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 8
15.03.2017, 13:35  [ТС] 7
Спс, я уже использую сигнал
Python
1
self.listWidget.itemDoubleClicked.connect(self.lstelems)
0
15.03.2017, 13:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2017, 13:35

PyQt5 установка
взял вот эту инструкцию...

PyQt5 ошибка
PyQt5 установлен, но происходит эта ошибка.

Не работает PyQt5
Долго пытался найти решение данной проблемы, ничего не выходило. Когда я из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru