我需要在我的应用程序中启用一个按钮,只要有东西被放到我的自定义QTreeWidget上。在
我对QTreeWidget进行了子类化,以实现自定义数据的拖放。但是当有东西被放到我的自定义QTreeWidget中时,我无法找到一种方法来获得通知。我找不到QTreeWidgetsignal来执行此操作。当然,QTreeWidget的dropEvent()将在每次删除某些内容时调用,但这对实现我正在尝试的操作没有多大帮助。在
在这里我实例化了一个定制的QTreeWidget,它接受来自另一个widget的drop
from PyQt4 import QtCore, QtGui
import MyTreeWidget
class TestWindow(QtGui.QDialog):
def __init__(self, parent=None):
super(TestWindow, self).__init__(parent)
self.myTreeWidget = MyTreeWidget.MyTreeWidget()
...
#self.myTreeWidget.onItemDropped.connect(self.doSomethingOnItemDropped) <== I am looking for something like this
def doSomethingOnItemDropped(self):
# Enable certain button
...
小部件是如何分类的
^{pr2}$有什么想法吗?谢谢!在
更新:这对我很有效
根据@ekhurvo的评论,我为我的自定义QTreeWidget定义了一个自定义信号itemDropped,它在dropEvent()事件处理程序中发出。在
import sys
from PyQt4 import QtGui, QtCore
class MyTreeWidget(QtGui.QTreeWidget):
itemDropped = QtCore.pyqtSignal()
def __init__(self, parent=None):
super(MyTreeWidget, self).__init__(parent)
self.setAcceptDrops(True)
def dropEvent(self, event):
if (event.mimeData().hasFormat('application/x-icon-and-text')):
event.acceptProposedAction()
data = event.mimeData().data("application/x-icon-and-text")
stream= QtCore.QDataStream(data, QtCore.QIODevice.ReadOnly)
text = QtCore.QString()
icon = QtGui.QIcon()
stream >> text >> icon
item = QtGui.QTreeWidgetItem(self)
item.setText(0, text)
item.setIcon(0, icon)
self.addTopLevelItem(item)
self.itemDropped.emit()
else:
event.ignore()
在我的应用程序中
from PyQt4 import QtCore, QtGui
import MyTreeWidget
class TestWindow(QtGui.QDialog):
def __init__(self, parent=None):
super(TestWindow, self).__init__(parent)
self.myTreeWidget = MyTreeWidget.MyTreeWidget()
self.myTreeWidget.itemDropped.connect(self.doSomethingOnItemDropped)
...
def doSomethingOnItemDropped(self):
# Enable certain button
...
在PySide2中,您可以使用:
您可以定义自定义信号并从
dropEvent
发出:相关问题 更多 >
编程相关推荐