Was ich bisher getan haben:Tabelle bearbeiten in PyQt QAbstractTableModel ohne Löschen von Inhalten
ich Implementierung eines benutzerdefinierten QAbstractTableModel
(verwendet in einer QTableView
-Widget), die bearbeitbare Zellen enthält. Die Eigenschaften dieser Zellen werden in meiner flags()
Methode angegeben, die wie folgt aussieht:
def flags(self, index): # Qt was imported from PyQt4.QtCore
if index.column() < 2:
return Qt.ItemIsEditable | Qt.ItemIsEnabled | \
Qt.ItemIsSelectable
else:
return Qt.ItemIsEnabled | Qt.ItemIsSelectable
Zellen in den ersten beiden Spalten sind markiert als editierbare wie ich will.
Was ich tun möchte:
jedoch, wenn die doppelte Zelle Klicken auf die Bearbeitung der enthaltene Text auszulösen gelöscht und ein leeres Feld angezeigt.
Aber ich will nicht löschen & den enthaltenen Text ersetzen, da der enthaltene Text sehr lang sein könnte und sollte nicht abgetippt werden. Ich möchte nur bearbeiten, was bereits enthalten ist. Wenn Sie auf die Zelle doppelklicken, sollte sie mit dem zuvor enthaltenen Text bearbeitet werden können (möglicherweise bereits ausgewählt).
Die Frage:
Wie kann ich dieses Verhalten erreichen? Muss ich meine Flags-Methode bearbeiten und unterschiedliche Eigenschaften für diese Zellen angeben?
Vielen Dank. Ich habe Ihren zweiten Ansatz mit 'QItemDelegate' versucht und es funktioniert genauso wie beabsichtigt. Wenn ich die 'Qt.EditRole' einstellen wollte, ohne die Klasse zu benutzen, wie würde ich das machen? Muss ich eine neue Methode in meinem benutzerdefinierten 'TableModel' definieren? – aisen
Ich glaube nicht, dass Sie in Ihrem Modell etwas tun sollten. Es ist jedoch fraglich, warum Sie ein benutzerdefiniertes Modell erstellen müssen. Funktioniert 'QStandardItemModel' nicht? Wenn Sie nur Flags steuern möchten, können Sie diese beim Erstellen der Elemente festlegen. Es muss keine dynamische Funktion für das Modell sein. –
Nun, ich finde nur heraus, wie man mit PyQt alles macht und wusste nicht einmal, dass es so etwas wie eine Standardklasse gibt. Ich werde es nachsehen. – aisen