Przenoszenie do drugiego QListWidget tylko na koniec listy

0

Przenoszę między dwoma listwidget. Co zrobić, abym mógł przenosić tylko na koniec listy, tzn. aby nie można było przesunąć w środek listy? Tryb multiselect.

0

Możesz ustawić flagę DragDropMode na QAbstractItemView.InternalMove, a następnie zaimplementować metodę dropEvent w celu przechwycenia zdarzenia upuszczenia elementu na liście. W metodzie dropEvent możesz sprawdzić, czy element zostanie upuszczony na koniec listy, a jeśli tak, to zezwolić na upuszczenie, w przeciwnym razie zignorować zdarzenie.

from PyQt5.QtWidgets import QListWidget, QAbstractItemView, QApplication, QListWidgetItem
from PyQt5.QtCore import Qt

class CustomListWidget(QListWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setDragDropMode(QAbstractItemView.InternalMove)

    def dropEvent(self, event):
        if event.source() == self and self.indexAt(event.pos()).row() == self.count() - 1:
            super().dropEvent(event)
        elif event.source() != self:
            item = QListWidgetItem(event.mimeData().text())
            self.addItem(item)

if __name__ == '__main__':
    app = QApplication([])
    list1 = CustomListWidget()
    list2 = CustomListWidget()
    items = ['item1', 'item2', 'item3', 'item4', 'item5', 'item6']
    list1.addItems(items)
    list1.setSelectionMode(QAbstractItemView.MultiSelection)
    list2.setSelectionMode(QAbstractItemView.MultiSelection)
    list1.show()
    list2.show()
    app.exec_()
0

Nie wyśietla items. Wyświetla tylko okno.

1 użytkowników online, w tym zalogowanych: 0, gości: 1