由uic.loadUi加载的小部件的子类

时间:2017-10-01 17:50:46

标签: python-3.x pyqt5

我使用python 3.6和pyqt5并通过self.ui = uic.loadUi("MainWindow.ui",self)加载我的窗口主要有2个QtreeViews和一个QList Widgets。我遇到dropEvent的问题。我必须将它分离到每个Widget /模型,以便我有不同的'dropActions'。但每次我放弃时,我都会接到来自dropEvent self.ui Object的{​​{1}}功能的电话,我试图将self.ui.treeView.viewport().installEventFilter(self)更改为单独的功能而没有成功。在文档中以及在此处和网上发现的一些示例中,存在具有拖放功能的 Widgets子类。但我找不到uic loader生成的Widgets的解决方案。我曾尝试在模型中安装拖放功能。但是根本没有运气。

如何对uic.loadUi加载的Widget进行子类化?

如何创建规则从哪里到哪里拖动&允许丢弃?

1 个答案:

答案 0 :(得分:0)

最简单的方法是事先进行子类化。

按如下方式创建my_tree_view.py

from PyQt5 import QtWidgets, QtGui

class MyTreeView(QtWidgets.QTreeView):
    def __init__(self, parent=None):
        super().__init__(parent)

    def dropEvent(self, event: QtGui.QDropEvent):
        print('MyTreeView dropEvent')
        super().dropEvent(event)

然后编辑.ui文件,并在</widget>行之后的最后添加以下内容。

 <customwidgets>
  <customwidget>
   <class>MyTreeView</class>
   <extends>QTreeView</extends>
   <header>my_tree_view</header>
  </customwidget>
 </customwidgets>

然后更改以下行(在.ui文件中更进一步) 从

<widget class="QTreeView" name="treeView">

<widget class="MyTreeView" name="treeView">