QListWidget拖放事件

时间:2020-07-19 11:30:30

标签: python pyside2

我无法接收到拖放事件信号,我尝试了Internet上找到的所有解决方案,但均未成功。拖放事件不发送任何内容。 (我可以在QlistWidegt中拖放项目,我希望事件被触发)

我想在触发拖放事件时打印(“ sth”)

from PySide2 import QtCore
from PySide2 import QtUiTools
from PySide2 import QtWidgets
from shiboken2 import wrapInstance
from PySide2 import QtGui

class ReOrder(QtWidgets.QDialog):

    def __init__(self, parent=maya_main_window()):
        super(ReOrder, self).__init__(parent)
        self.setWindowTitle("ReOrder ")
    
       
 
        self.setFixedSize(300,405)
          ################################### Calling The methods below                 
        
        self.CreateWidegts()
        self.Createlayouts()
        self.init_ui()

        self.setMouseTracking(True)
        
             ############### Working Area ###########################


    def init_ui(self):
        
      

        self.myListWidget.setDragEnabled(True)
        self.myListWidget.setAcceptDrops(True)
        self.myListWidget.setDefaultDropAction(QtCore.Qt.MoveAction)
        self.myListWidget.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove)
        
       
        self.myListWidget.setFont(QtGui.QFont('Berlin Sans FB Demi', 12))
        self.myListWidget.addItem("Item1","Item2","Item3")

       ##I tried to get the drag drop event using the QlistWidget build in signals but ..
         #self.myListWidget.currentItemChanged.connect(self.dosth)
        
 
        

    def CreateWidegts(self):
        self.myListWidget = QtWidgets.QListWidget() 
        self.GoBtn = QtWidgets.QPushButton("ReOrder")


    def Createlayouts(self):
        mainLayout = QtWidgets.QVBoxLayout(self) 
        mainLayout.addWidget(self.myListWidget)
     
        mainLayout.addWidget(self.GoBtn)

    def dosth(self):
        print("dosth")

###### Drag Drop event ##########

    def dropEvent(self, event):
         event.accept()
         print("Drop event Triggered")

    def dragEvent(self, event)
         event.accept()
         print("drag event Triggered")

1 个答案:

答案 0 :(得分:0)

无数小时的尝试后,我发现了这一点。 解决方案: 您需要创建一个自定义信号,因为未构建内部QListWidet拖放信号。 您可以在一般事件中使用任何构建发出信号,例如MousePressEvent,DragEnterEvent,....。 对我来说,我想要当您更改QList的顺序时执行……。

class TheQListWiget(QtWidgets.QListWidget):
    CustDragSig = QtCore.Signal()

    def dropEvent(self, event):
        super(TheQListWiget,self).dropEvent(event)
        event.accept()
        self.CustDragSig.emit()

其余代码:

class ReOrder(QtWidgets.QDialog):

    def __init__(self, parent=maya_main_window()):
        super(ReOrder, self).__init__(parent)
        self.setWindowTitle("ReOrder ")
        self.setFixedSize(300,405)
          ################### Calling The methods below                 
        
        self.CreateWidegts()
        self.Createlayouts()
        self.init_ui()

        self.setMouseTracking(True)
        
             ############### Working Area ###########################


    def init_ui(self):
        

        self.myListWidget.setDragEnabled(True)
        self.myListWidget.setAcceptDrops(True)
        self.myListWidget.setDefaultDropAction(QtCore.Qt.MoveAction)
        self.myListWidget.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove)
        
       
        self.myListWidget.setFont(QtGui.QFont('Berlin Sans FB Demi', 12))
        self.myListWidget.addItem("Item1","Item2","Item3")
        
        self.myListWidget.CustDragSig.connect(self.do_sth)

    def CreateWidegts(self):
        self.myListWidget = TheQListWiget() ### Your QList must from CustomClass
        self.GoBtn = QtWidgets.QPushButton("ReOrder")


    def Createlayouts(self):
        mainLayout = QtWidgets.QVBoxLayout(self) 
        mainLayout.addWidget(self.myListWidget)
        mainLayout.addWidget(self.GoBtn)

    def do_sth(self):
        print("Custom Signal Emitted !")