Я ищу функциональность перетаскивания из списка 1 в список 2, и мне также нужна функциональность перетаскивания для элементов внутри списка 2. Я не могу найти встроенный метод для выполнения обоих этих действий в соответствии с запросом. Спасибо.

enter image description here

Вот мой код. Спасибо!

import sys
from PyQt5.QtWidgets import *


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        hbox = QHBoxLayout(self)

        self.listWidget1 = QListWidget(self)
        self.listWidget1.addItems(['red', 'green', 'blue'])
        self.listWidget1.setDragDropMode(QAbstractItemView.DragDrop)

        self.listWidget2 = QListWidget(self)
        self.listWidget2.addItems(['black', 'silver', 'grey'])
        self.listWidget2.setDragDropMode(QAbstractItemView.InternalMove)
        self.listWidget2.setAcceptDrops(True)

        hbox.addWidget(self.listWidget1)
        hbox.addWidget(self.listWidget2)

        self.setLayout(hbox)
        self.setGeometry(300, 300, 350, 250)
        self.show()


def main():

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
0
Brett Lapierre 22 Фев 2021 в 04:48

1 ответ

Лучший ответ

Вы можете изменить DragDropMode в зависимости от источника события.

class List(QListWidget):

    def dragEnterEvent(self, event):
        if event.source() is self:
            self.setDragDropMode(QAbstractItemView.InternalMove)
        else:
            self.setDragDropMode(QAbstractItemView.DragDrop)
        super().dragEnterEvent(event)

И вместо этого используйте подкласс:

self.listWidget2 = List(self)
1
alec 22 Фев 2021 в 02:27