So come creare un semplice QTreeView() con un QDirModel (o QFileSystemModel) per mostrare i file/le cartelle nel sistema ma voglio aggiungere una casella di controllo accanto a ciascuno di essi quindi l'utente può selezionare alcune cartelle/file sul suo sistema. Ovviamente, ho anche bisogno di sapere quali hanno scelto. Qualche suggerimento?PyQt4 Visualizzazione directory locale con opzione per selezionare le cartelle
fondamentalmente qualcosa di simile ...
seguito è riportato un codice di esempio che rende una vista directory, ma senza le caselle di controllo.
from PyQt4 import QtGui
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
model = QtGui.QDirModel()
tree = QtGui.QTreeView()
tree.setModel(model)
tree.setAnimated(False)
tree.setIndentation(20)
tree.setSortingEnabled(True)
tree.setWindowTitle("Dir View")
tree.resize(640, 480)
tree.show()
sys.exit(app.exec_())
Questo funziona bene, ma sai come modificarlo in modo che quando si clicca su C: allora tutte le sottocategorie ottenere cliccato e quando uno ha cliccato su una sottocategoria C: diventa un punto (mezzo-controllato)? – Kiarash
@Kiarash Dovresti cambiare gli indici figli e parent di 'index' in' setData' di conseguenza. Per ottenere un indice secondario, utilizzare 'QModelIndex.child'. Per ottenere un indice padre, utilizzare 'QModelIndex.parent'. Per ottenere un numero di figli di un determinato indice si dovrebbe usare 'QDirModel.rowCount'. Vedi [this] (http://pyqt.sourceforge.net/Docs/PyQt4/qmodelindex.html) e [this] (http://pyqt.sourceforge.net/Docs/PyQt4/qabstractitemmodel.html#rowCount) – user2155932
Quindi nel setData, ho semplicemente aggiunto questo: per i in range (self.rowCount (index)): self.setData (index.child (i, 0), value, role) MA è così lento se si fa clic su C:. Qualche idea di come si possa risolvere? – Kiarash