Форум сайта python.su
Подскажите пожалуйста как сделать в списке элементовглавный элемент, который будет делать выбранными все элементы.
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)
Офлайн
Сейчас разбирался с вопросом. Как я понял, мне нужно переписывать это с использованием QTreeView и создавать свой заголовок в котором в нужном месте будет checkbox выбирающий все элементы.
Отредактировано mitya_s_v (Янв. 5, 2015 16:51:40)
Офлайн