【问题标题】:How to add logic to QListWidget drag/drop如何向 QListWidget 拖放添加逻辑
【发布时间】:2018-01-07 11:01:06
【问题描述】:

我是 Python/PyQt (v4) 新手,正在继承 QListWidget 并利用其内部拖放机制:

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class AlgorithmListControl(QListWidget):
    def __init__(self, parent = None):
        super(AlgorithmListControl, self).__init__(parent)

        self.setAcceptDrops(True)
        self.setDragEnabled(True)
        self.setDragDropMode(QAbstractItemView.InternalMove)

我对默认行为和外观感到满意,并且我能够在小部件内部拖放项目。现在,我想添加一些在拖动操作开始时和放置操作结束后发生的自定义逻辑。我遇到的麻烦是如果我处理事件,例如如下所示的dragEnterEvent:

def dragEnterEvent(self, event):
    ...

然后我不再获得良好的默认拖放行为(我无法将项目拖动到新位置,我没有获得水平插入指示器等)。如何保留标准拖放行为但在这两个事件点添加我的自定义逻辑?提前谢谢你。

【问题讨论】:

    标签: pyqt pyqt4 qlistwidget


    【解决方案1】:

    由于在使用同名时会覆盖方法,所以需要实现所有以标准方式发生的动作,或者调用里面的父(标准)方法。

    借助super()函数,您可以通过继承调用父类中的方法,然后实现您自己的逻辑:

    def dragEnterEvent(self, event):
        super().dragEnterEvent(event)
        print('enter')
    

    【讨论】:

    • 当然!我怎么可能没有意识到呢?谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多