2014-04-26 11 views
5

Sono appena passato da wxPython a PyQT e ho qualche problema con QTreeview. Dispongo di una visualizzazione QT che visualizzerà i dati categorizzati in sezioni espandibili, ma i dati in questo TreeView non dovrebbero essere modificabili, ma devo essere in grado di consentire all'utente di selezionare i dati (il doppio clic sta per eseguire un altro metodo). Non sono sicuro di come renderlo di sola lettura ma anche selezionabile. Sto usando QStandardItemModel con QStandardItem per conservare i dati.PyQT - Come si può rendere un QTreeview non modificabile ma anche selezionabile?

Qualsiasi aiuto sarebbe molto apprezzato.

risposta

11

È possibile impostare singoli elementi per essere modificabile in questo modo quando si crea la QSandardItem

item = QStandardItem('my_item_text') 
item.setEditable(False) 

È possibile disattivare la modifica per l'intero controllo TreeView chiamando

my_treeview.setEditTriggers(QAbstractItemView.NoEditTriggers) 

Per impostazione predefinita la vista ad albero dovrebbe consentire per selezionare gli articoli, ma se si desidera modificare il comportamento predefinito si vorrà osservare i metodi setSelectionMode() e setSelectionBehavior() della vista ad albero (bene sono per QAbstractItemView che QTreeView eredita da). La documentazione C++ per questi metodi può essere trovata here che generalmente uso sulla documentazione PyQt in quanto è spesso più completa, e non è troppo difficile da tradurre in codice Python. Basta sostituire tutte le istanze di :: con .)

+1

Grazie per la rapida risposta! Questo ha funzionato, mi è proprio piaciuto che ne avessi bisogno. Ho anche scoperto che puoi fare qualcosa di simile a questo 'item.setFlags (QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable)' e ti darà lo stesso comportamento. Ma la disabilitazione della modifica per l'intera vista ad albero in una volta è migliore. – HawksFan21

+1

Nessun problema! Sono abbastanza sicuro che 'item.setEditable()' avvolge 'item.setFlags()' al livello basso, ma senza sovrascrivere il set esistente di flag che non si riferiscono alla modifica. –

Problemi correlati