2017-09-14 1 views
0

Ich habe ein pyqt4-Setup mit einem benutzerdefinierten Widget als Element des Listwidgets. Ich habe zwei Schaltflächen in diesem benutzerdefinierten Widget, um es in der Liste nach oben oder unten zu verschieben, indem ich es nehme und es entweder 1 nach oben oder 1 nach unten einfüge.PYQT4 Inhalt des Listenelements verschwindet, wenn es wieder in die Liste eingefügt wird

Wenn es eingefügt wird, ist das Element immer noch hervorgehoben, aber der Inhalt ist verschwunden.

Hier ist, was das Element bewegt.

def ChangeInit(self, row, direction): 
     item = self.initiativeList.takeItem(row) 
     self.initiativeList.insertItem(row + direction, item) 

row = die Reihe der Artikel ist in
Richtung = 1 oder -1, je nachdem, welche Taste gedrückt wird

Irgendwelche Ideen, warum das Element bewegt zu werden, erscheint aber der Inhalt nicht bewegt wird, damit oder zumindest nicht sichtbar?

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Antwort

0

Die documentation of QListWidget.addItem Staaten:

Warnung: A QListWidgetItem kann nur einmal zu einem QListWidget hinzugefügt werden. Das mehrfache Hinzufügen desselben QListWidgetItem zu einem QListWidget führt zu einem nicht definierten Verhalten.

Obwohl dies in mehr als einer Weise interpretiert werden (dh ein Widget mehrere Male gleichzeitig das Hinzufügen oder das Hinzufügen es sequentiell wie Sie tun) ich sugest, dass Sie ein völlig neues QListWidgetItem-Objekt erstellen und einfügen dass in der Liste, nur um sicher zu sein. Ansonsten weiß ich nicht, ob Qt die zugrunde liegenden Indizes korrekt behandelt.

P.S. das nächste Mal würde ich das allgemeine PyQt Etikett hinzufügen, es sei denn, es ist ein Problem speziell für PyQt4. Dadurch erhalten Sie möglicherweise mehr Ansichten (Sie haben jetzt nur zwei nach 23 Stunden).

+0

Diese sollten ihre eigenen Objekte sein. Ich habe eine andere Funktion, die meine InitCreatureObject-Klasse verwendet, um ein Objekt zu erstellen, das es dann in der Liste einfügt. Ich kann versuchen, es einfach zu entfernen und ein neues einzufügen und zu sehen, ob das dann funktioniert. Scheint wie viel zusätzliche Verarbeitung, nur um es in der Liste nach oben oder unten zu verschieben. – Aaranos

+0

Ja, es scheint mehr Arbeit als nötig zu sein. Eine andere Alternative wäre, ein separates Modell und eine separate Ansicht zu verwenden. Verwenden Sie eine 'QListView' und implementieren Sie Ihr eigenes Modell, indem Sie von' QAbstractListModel' erben. Dies erfordert einige Anstrengungen, aber wenn Sie mehr als ein einfaches Listen-Widget wünschen, kann es sich lohnen. – titusjan

+0

Ich habe meinen Code optimiert, um ein neues Element zu erstellen, und fülle nur aus, was es benötigt, basierend auf dem alten Objekt, es ist keine schöne Lösung, aber es funktioniert. Ich werde mir die andere Empfehlung ansehen, die Sie hatten, wenn es mir immer noch Probleme bereitet. Vielen Dank. – Aaranos

Verwandte Themen