QListWidget拖放事件

2024-04-24 13:40:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法接收拖放事件信号,我尝试了在互联网上找到的所有解决方案,但没有成功。拖放事件不发送任何内容。 (我可以拖放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")

Tags: fromimportselfeventtrueinitdef事件
1条回答
网友
1楼 · 发布于 2024-04-24 13:40:50

经过无数个小时的尝试,我终于明白了这一点。 解决方案: 您需要创建自定义信号,因为内部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 !")

相关问题 更多 >