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
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.