pyqt-QTreeWidget在项目放置时发出信号

2024-10-01 13:27:45 发布

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

我需要在我的应用程序中启用一个按钮,只要有东西被放到我的自定义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 

      ...

Tags: textimportselfeventinitdefparenticon
2条回答

在PySide2中,您可以使用:

class MyTreeWidget(QtGui.QTreeWidget):

    itemDropped = QtCore.Signal()

    def dropEvent(self, event): 
        if (event.mimeData().hasFormat('application/x-icon-and-text')):

            self.itemDropped.emit()

您可以定义自定义信号并从dropEvent发出:

class MyTreeWidget(QtGui.QTreeWidget):
    itemDropped = QtCore.pyqtSignal()

    def dropEvent(self, event): 
        if (event.mimeData().hasFormat('application/x-icon-and-text')):
            ...
            self.itemDropped.emit()

相关问题 更多 >