Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 5, 2015 14:33:51

mitya_s_v
Зарегистрирован: 2014-09-10
Сообщения: 64
Репутация: +  4  -
Профиль   Отправить e-mail  

QListView выбор всех элементов

Подскажите пожалуйста как сделать в списке элементовглавный элемент, который будет делать выбранными все элементы.

import sys
from PyQt4 import QtGui, QtCore
class ListModel(QtGui.QStandardItemModel):
    def __init__(self, view, dataForModel):
        super().__init__(view)
        self.dataForModel = dataForModel
        self.selectedItems = []  # Список с индексами выбранных элементов
        self.buildItems()
        self.connect(self, QtCore.SIGNAL('itemChanged(QStandardItem *)'), self.itemChanged)
    def buildItems(self):
        for song in self.dataForModel:
            item = QtGui.QStandardItem(song)
            item.setCheckable(True)  # Разрешаем выделять наши пункты
            item.setEditable(False)  # Запрещаем редактировать текст
            self.appendRow(item)  # Добавляем созданный элементв модель
    def reloadData(self, newData):
        self.clear()  # Удаляем существующие элементы
        self.dataForModel = newData
        self.buildItems()
    def itemChanged(self, item):
        indexItem = item.index().row()
        if item.checkState() and indexItem not in self.selectedItems:
            self.selectedItems.append(indexItem)
        else:
            self.selectedItems.remove(indexItem)
class View(QtGui.QListView):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.buildWidget()
    def buildWidget(self):
        self.model = ListModel(self, [str(i) for i in ['первый', 'второй', 'третий']])
        self.setModel(self.model)
    def reloadItems(self):
        self.model.reloadData(['новый первый', 'новый второй'])
    def printSelected(self):
        print(self.model.selectedItems)
class MainWindow(QtGui.QWidget):
    def __init__(self):
        super().__init__()
        self.buildWidget()
    def buildWidget(self):
        mainLayout = QtGui.QVBoxLayout(self)
        view = View(self)
        mainLayout.addWidget(view)
        button1 = QtGui.QPushButton('Загрузить новые значения', self)
        self.connect(button1, QtCore.SIGNAL('clicked()'), view.reloadItems)
        mainLayout.addWidget(button1)
        button2 = QtGui.QPushButton('Выбранные элементы', self)
        self.connect(button2, QtCore.SIGNAL('clicked()'), view.printSelected)
        mainLayout.addWidget(button2)
if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    app.exec_()

Отредактировано mitya_s_v (Янв. 5, 2015 14:34:22)

Офлайн

#2 Янв. 5, 2015 16:51:28

mitya_s_v
Зарегистрирован: 2014-09-10
Сообщения: 64
Репутация: +  4  -
Профиль   Отправить e-mail  

QListView выбор всех элементов

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

Отредактировано mitya_s_v (Янв. 5, 2015 16:51:40)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version