【问题标题】:Remove item from QListWidget on drag and drop拖放时从 QListWidget 中删除项目
【发布时间】:2020-06-18 13:21:23
【问题描述】:

我有两个 QListWidgets 并排的项目。我想设置事件启用

  1. 在将项目拖到 list2 时从 list1 中删除它

  2. 反之亦然

代码如下:

from PyQt5.QtWidgets import QApplication, QWidget, QListWidget, QHBoxLayout,QListWidgetItem
from PyQt5.QtGui import QIcon
import sys
import glob
import os


class Window(QWidget):
    def __init__(self):
        super().__init__()

        self.myListWidget1 = QListWidget()
        self.myListWidget2 = QListWidget()
        self.myListWidget1.setAcceptDrops(True)
        self.myListWidget1.setDragEnabled(True)
        self.myListWidget2.setAcceptDrops(True)
        self.myListWidget2.setDragEnabled(True)
        self.setGeometry(300, 350, 500, 300)
        self.myLayout = QHBoxLayout()
        self.myLayout.addWidget(self.myListWidget1)
        self.myLayout.addWidget(self.myListWidget2)

        os.chdir("./Downloads")
        for file in glob.glob("*.pdf"):
            QListWidgetItem(file, self.myListWidget1)

        self.setWindowTitle('Drag and Drop');
        self.setLayout(self.myLayout)

        self.show()

App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())

【问题讨论】:

    标签: python python-3.x pyqt pyqt5 qlistwidget


    【解决方案1】:

    必须设置为Qt::MoveActionQListWidgetdefaultDropAction

    self.myListWidget1.setDefaultDropAction(Qt.MoveAction)
    self.myListWidget2.setDefaultDropAction(Qt.MoveAction)
    

    【讨论】:

    • 很好。但是当我不小心拖放到同一个列表中时,该项目就会消失。它应该留在原地。
    • @xralf 如果您拖放到同一个 QListWidget 上,该项目不会消失,而是放在最后,据我了解,如果 QListWidget 相同,您希望在释放后保持该位置,我说的对吗?
    • 试试第二个列表。如果你掉得太早,物品会消失。
    • @xralf 不,我没有看到。 1) 如果源和目标相同,则只会看到项目的移动, 2) 如果源和目标不同,则项目将被移动到从上一个列表中删除的目标。 Linux , PyQt 5.14.1
    • 我在 Linux,PyQt 5.9.5
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多