Найти - Пользователи
Полная версия: QListView выбор всех элементов
Начало » GUI » QListView выбор всех элементов
1
mitya_s_v
Подскажите пожалуйста как сделать в списке элементовглавный элемент, который будет делать выбранными все элементы.
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
Сейчас разбирался с вопросом. Как я понял, мне нужно переписывать это с использованием QTreeView и создавать свой заголовок в котором в нужном месте будет checkbox выбирающий все элементы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB