我无法接收到拖放事件信号,我尝试了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")
答案 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 !")