1

I'm trying to implement a context menu in a QtTreeView Widget. Using the advice in Why mouseMoveEvent does nothing in PyQt5 I've created a sub class of the QTreeView:

class TreeView(QTreeView):
def mousePressEvent(self, event):
    if event.type() == QEvent.MouseButtonPress:
        if event.button() == Qt.LeftButton:
            print( "Left click")
        elif event.button() == Qt.RightButton:
            print( "Right click")
        elif event.button() == Qt.MiddleButton:
            print( "Middle click")
    super(TreeView, self).mousePressEvent(event)

which I'm overwriting the QtTreeView (which I designed in Qt Designer) as follows:

self.dockWidget.treeView = TreeView(self.dockWidget.treeView)

This works and allows for the mousePressEvents to be captured in the TreeView but it changes the size of the content in the TreeView:

Incorrect TreeView Size

When it should look like:

Correct TreeView Size[3]

I've tried setting the SizePolicy:

self.dockWidget.treeView.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)

but its not making a difference. I'm looking for a way to either prevent it from changing size or return it to its original size once it has changed.

Reprex - 3 Files:

main.py

from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, 
QListWidget,QTextEdit,QTreeView, QSizePolicy
from PyQt5.QtGui import QIcon, QStandardItemModel
from PyQt5.QtCore import Qt, QEvent
import sys

from utility_core_dockwidget import UtilityDockWidget



class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        title= "Dockable Application"
        top=400
        left=400
        width=600
        height= 500

        icon = "icon.png"

        self.setWindowTitle(title)
        self.setGeometry(top,left,width,height)
        self.setWindowIcon(QIcon("icon.png"))

        self.textEdit = QTextEdit()
        self.setCentralWidget(self.textEdit)
        self.dockAble()
        self.populateTreeView()

    def dockAble(self):
        self.dock = UtilityDockWidget()
        self.dock.treeView= TreeView(self.dock.treeView) #overwriting the treeview with the custom class causes the display issues
        self.addDockWidget(Qt.RightDockWidgetArea,self.dock)
        self.dock.treeView.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)

    def populateTreeView(self):
        print("here")
        model = self.createTreeViewLayerModel(self.dock.treeView)
        self.dock.treeView.setModel(model)

        for i in range (1,10):
            layerName= f"LayerName {i}"
            visibility = "Visible"
            layerId = i
            self.addTreeViewItem(model, layerName, visibility, layerId)

    def createTreeViewLayerModel(self,parent):
        model = QStandardItemModel(0, 3, parent)
        model.setHeaderData(0, Qt.Horizontal, "Layer Name")
        model.setHeaderData(1, Qt.Horizontal, "Visibility")
        model.setHeaderData(2, Qt.Horizontal, "Layer ID")

        return model

    def addTreeViewItem(self,model, layerName, visibility,layerId):
        model.insertRow(0)
        model.setData(model.index(0, 0), layerName)
        model.setData(model.index(0, 1), visibility)
        model.setData(model.index(0, 2), layerId)


class TreeView(QTreeView):
    def mousePressEvent(self, event):
        if event.type() == QEvent.MouseButtonPress:
            if event.button() == Qt.LeftButton:
                print( "Left click")
            elif event.button() == Qt.RightButton:
                print( "Right click")
            elif event.button() == Qt.MiddleButton:
                print( "Middle click")
        super(TreeView, self).mousePressEvent(event)

app = QApplication(sys.argv)
window=Window()
window.show()
app.exec()

utility_core_dockwidget.py:

import os

from PyQt5 import uic, QtWidgets, QtGui
from PyQt5.QtCore import pyqtSignal, Qt


FORM_CLASS, _ = uic.loadUiType(os.path.join(
    os.path.dirname(__file__), 'utility_core_dockwidget_base.ui'))


class UtilityDockWidget(QtWidgets.QDockWidget, FORM_CLASS):

    closingPlugin = pyqtSignal()

    def __init__(self, parent=None):
        """Constructor."""
        super(UtilityDockWidget, self).__init__(parent)
        self.setupUi(self)

    def closeEvent(self, event):
        self.closingPlugin.emit()
        event.accept()

utility_core_dockwidget_base.ui:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>utilityDockWidgetBase</class>
 <widget class="QDockWidget" name="utilityDockWidgetBase">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>660</width>
    <height>807</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Utility</string>
  </property>
  <widget class="QWidget" name="dockWidgetContents">
   <layout class="QHBoxLayout" name="horizontalLayout_7">
    <item>
     <widget class="QTabWidget" name="tabWidget_2">
      <property name="sizePolicy">
       <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
      <property name="minimumSize">
       <size>
        <width>200</width>
        <height>500</height>
       </size>
      </property>
      <property name="currentIndex">
       <number>0</number>
      </property>
      <widget class="QWidget" name="tab_5">
       <attribute name="title">
        <string>Layer Source Changer</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_7">
        <item>
         <layout class="QGridLayout" name="gridLayout_2">
          <property name="topMargin">
           <number>6</number>
          </property>
          <item row="1" column="0">
           <widget class="QLabel" name="label_8">
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="text">
             <string>Source List</string>
            </property>
           </widget>
          </item>
          <item row="0" column="1" colspan="2">
           <widget class="QLineEdit" name="searchBar">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="maximumSize">
             <size>
              <width>10000</width>
              <height>16777215</height>
             </size>
            </property>
           </widget>
          </item>
          <item row="1" column="1">
           <widget class="QComboBox" name="layerSourceList">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>250</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>10000</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <family>MS Shell Dlg 2</family>
             </font>
            </property>
            <property name="editable">
             <bool>false</bool>
            </property>
           </widget>
          </item>
          <item row="1" column="2">
           <widget class="QPushButton" name="browseNewSource">
            <property name="maximumSize">
             <size>
              <width>35</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="text">
             <string>...</string>
            </property>
           </widget>
          </item>
          <item row="0" column="0">
           <widget class="QLabel" name="label_9">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="maximumSize">
             <size>
              <width>50</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="layoutDirection">
             <enum>Qt::LeftToRight</enum>
            </property>
            <property name="autoFillBackground">
             <bool>false</bool>
            </property>
            <property name="text">
             <string>Search</string>
            </property>
           </widget>
          </item>
         </layout>
        </item>
        <item>
         <layout class="QHBoxLayout" name="horizontalLayout_8">
          <item>
           <widget class="QPushButton" name="refreshComboBox">
            <property name="sizePolicy">
             <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>75</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>120</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="text">
             <string>Refresh Sources</string>
            </property>
           </widget>
          </item>
          <item>
           <widget class="QCheckBox" name="onlyVisibleCheckbox">
            <property name="layoutDirection">
             <enum>Qt::LeftToRight</enum>
            </property>
            <property name="text">
             <string>Only Visible Layers</string>
            </property>
           </widget>
          </item>
         </layout>
        </item>
        <item>
         <layout class="QGridLayout" name="gridLayout_4">
          <property name="topMargin">
           <number>10</number>
          </property>
          <item row="1" column="0">
           <widget class="QPushButton" name="updateSelectedButton">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>110</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>100</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="text">
             <string>Update Selected</string>
            </property>
           </widget>
          </item>
          <item row="1" column="1">
           <widget class="QPushButton" name="updateAllButton">
            <property name="minimumSize">
             <size>
              <width>110</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>110</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="toolTip">
             <string>Update all the layers with sources found in Source List</string>
            </property>
            <property name="text">
             <string>Update All</string>
            </property>
           </widget>
          </item>
          <item row="1" column="2">
           <spacer name="horizontalSpacer_5">
            <property name="orientation">
             <enum>Qt::Horizontal</enum>
            </property>
            <property name="sizeType">
             <enum>QSizePolicy::Expanding</enum>
            </property>
            <property name="sizeHint" stdset="0">
             <size>
              <width>40</width>
              <height>20</height>
             </size>
            </property>
           </spacer>
          </item>
          <item row="2" column="0">
           <widget class="QLabel" name="sourceInformationLabel">
            <property name="maximumSize">
             <size>
              <width>120</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="text">
             <string>Source Information</string>
            </property>
           </widget>
          </item>
          <item row="0" column="0">
           <widget class="QLabel" name="label_10">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="maximumSize">
             <size>
              <width>110</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="toolTip">
             <string>Update to the latest version</string>
            </property>
            <property name="text">
             <string>Automatic Options</string>
            </property>
           </widget>
          </item>
         </layout>
        </item>
        <item>
         <widget class="QTreeView" name="treeView">
          <property name="sizePolicy">
           <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
          <property name="minimumSize">
           <size>
            <width>0</width>
            <height>0</height>
           </size>
          </property>
          <property name="maximumSize">
           <size>
            <width>16777215</width>
            <height>16777215</height>
           </size>
          </property>
          <property name="styleSheet">
           <string notr="true">selection-color: qradialgradient(spread:repeat, cx:0.5, cy:0.5, radius:0.077, fx:0.5, fy:0.5, stop:0 rgba(0, 169, 255, 147), stop:0.497326 rgba(0, 0, 0, 147), stop:1 rgba(0, 169, 255, 147));</string>
          </property>
          <property name="rootIsDecorated">
           <bool>false</bool>
          </property>
          <property name="sortingEnabled">
           <bool>true</bool>
          </property>
          <property name="animated">
           <bool>true</bool>
          </property>
          <attribute name="headerCascadingSectionResizes">
           <bool>true</bool>
          </attribute>
          <attribute name="headerDefaultSectionSize">
           <number>200</number>
          </attribute>
          <attribute name="headerShowSortIndicator" stdset="0">
           <bool>true</bool>
          </attribute>
         </widget>
        </item>
        <item>
         <widget class="QLabel" name="label_11">
          <property name="font">
           <font>
            <weight>75</weight>
            <bold>true</bold>
           </font>
          </property>
          <property name="text">
           <string>Log</string>
          </property>
         </widget>
        </item>
        <item>
         <widget class="QTextEdit" name="textEdit"/>
        </item>
        <item>
         <spacer name="verticalSpacer_4">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
          <property name="sizeHint" stdset="0">
           <size>
            <width>20</width>
            <height>40</height>
           </size>
          </property>
         </spacer>
        </item>
       </layout>
      </widget>
     </widget>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>
Tim
  • 173
  • 1
  • 11

1 Answers1

2

You are assuming that the following code:

self.dockWidget.treeView = TreeView(self.dockWidget.treeView)

is replacing the QTreeView created by Qt Designer, because no, you are only creating another QTreeView that is a child of the original QTreeView.

Your logic is similar to:

x = 10
y = x
x = 100

And you think that and it has the value of y is 100 but obviously not.


The solution in this case is to promote the widget, for more information check the following:

Considering that your files must have the following structure:

├── main.py
├── treeview.py
├── utility_core_dockwidget_base.ui
└── utility_core_dockwidget.py

main.py

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon, QStandardItemModel
from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QListWidget, QTextEdit, QTreeView,QSizePolicy

from utility_core_dockwidget import UtilityDockWidget


class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        title = "Dockable Application"
        top, left, width, height = 400, 400, 600, 500

        icon = "icon.png"

        self.setWindowTitle(title)
        self.setGeometry(top, left, width, height)
        self.setWindowIcon(QIcon("icon.png"))

        self.textEdit = QTextEdit()
        self.setCentralWidget(self.textEdit)
        self.dockAble()
        self.populateTreeView()

    def dockAble(self):
        self.dock = UtilityDockWidget()
        self.addDockWidget(Qt.RightDockWidgetArea, self.dock)
        self.dock.treeView.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)

    def populateTreeView(self):
        print("here")
        model = self.createTreeViewLayerModel(self.dock.treeView)
        self.dock.treeView.setModel(model)

        for i in range(1, 10):
            layerName = f"LayerName {i}"
            visibility = "Visible"
            layerId = i
            self.addTreeViewItem(model, layerName, visibility, layerId)

    def createTreeViewLayerModel(self, parent):
        model = QStandardItemModel(0, 3, parent)
        model.setHeaderData(0, Qt.Horizontal, "Layer Name")
        model.setHeaderData(1, Qt.Horizontal, "Visibility")
        model.setHeaderData(2, Qt.Horizontal, "Layer ID")

        return model

    def addTreeViewItem(self, model, layerName, visibility, layerId):
        model.insertRow(0)
        model.setData(model.index(0, 0), layerName)
        model.setData(model.index(0, 1), visibility)
        model.setData(model.index(0, 2), layerId)


if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec())

treeview.py

from PyQt5 import QtCore, QtWidgets


class TreeView(QtWidgets.QTreeView):
    def mousePressEvent(self, event):
        if event.type() == QtCore.QEvent.MouseButtonPress:
            if event.button() == QtCore.Qt.LeftButton:
                print("Left click")
            elif event.button() == QtCore.Qt.RightButton:
                print("Right click")
            elif event.button() == QtCore.Qt.MiddleButton:
                print("Middle click")
        super(TreeView, self).mousePressEvent(event)

utility_core_dockwidget_base.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>utilityDockWidgetBase</class>
 <widget class="QDockWidget" name="utilityDockWidgetBase">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>660</width>
    <height>807</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Utility</string>
  </property>
  <widget class="QWidget" name="dockWidgetContents">
   <layout class="QHBoxLayout" name="horizontalLayout_7">
    <item>
     <widget class="QTabWidget" name="tabWidget_2">
      <property name="sizePolicy">
       <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
      <property name="minimumSize">
       <size>
        <width>200</width>
        <height>500</height>
       </size>
      </property>
      <property name="currentIndex">
       <number>0</number>
      </property>
      <widget class="QWidget" name="tab_5">
       <attribute name="title">
        <string>Layer Source Changer</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_7">
        <item>
         <layout class="QGridLayout" name="gridLayout_2">
          <property name="topMargin">
           <number>6</number>
          </property>
          <item row="1" column="0">
           <widget class="QLabel" name="label_8">
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="text">
             <string>Source List</string>
            </property>
           </widget>
          </item>
          <item row="0" column="1" colspan="2">
           <widget class="QLineEdit" name="searchBar">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="maximumSize">
             <size>
              <width>10000</width>
              <height>16777215</height>
             </size>
            </property>
           </widget>
          </item>
          <item row="1" column="1">
           <widget class="QComboBox" name="layerSourceList">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>250</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>10000</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <family>MS Shell Dlg 2</family>
             </font>
            </property>
            <property name="editable">
             <bool>false</bool>
            </property>
           </widget>
          </item>
          <item row="1" column="2">
           <widget class="QPushButton" name="browseNewSource">
            <property name="maximumSize">
             <size>
              <width>35</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="text">
             <string>...</string>
            </property>
           </widget>
          </item>
          <item row="0" column="0">
           <widget class="QLabel" name="label_9">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="maximumSize">
             <size>
              <width>50</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="layoutDirection">
             <enum>Qt::LeftToRight</enum>
            </property>
            <property name="autoFillBackground">
             <bool>false</bool>
            </property>
            <property name="text">
             <string>Search</string>
            </property>
           </widget>
          </item>
         </layout>
        </item>
        <item>
         <layout class="QHBoxLayout" name="horizontalLayout_8">
          <item>
           <widget class="QPushButton" name="refreshComboBox">
            <property name="sizePolicy">
             <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>75</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>120</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="text">
             <string>Refresh Sources</string>
            </property>
           </widget>
          </item>
          <item>
           <widget class="QCheckBox" name="onlyVisibleCheckbox">
            <property name="layoutDirection">
             <enum>Qt::LeftToRight</enum>
            </property>
            <property name="text">
             <string>Only Visible Layers</string>
            </property>
           </widget>
          </item>
         </layout>
        </item>
        <item>
         <layout class="QGridLayout" name="gridLayout_4">
          <property name="topMargin">
           <number>10</number>
          </property>
          <item row="1" column="0">
           <widget class="QPushButton" name="updateSelectedButton">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>110</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>100</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="text">
             <string>Update Selected</string>
            </property>
           </widget>
          </item>
          <item row="1" column="1">
           <widget class="QPushButton" name="updateAllButton">
            <property name="minimumSize">
             <size>
              <width>110</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>110</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="toolTip">
             <string>Update all the layers with sources found in Source List</string>
            </property>
            <property name="text">
             <string>Update All</string>
            </property>
           </widget>
          </item>
          <item row="1" column="2">
           <spacer name="horizontalSpacer_5">
            <property name="orientation">
             <enum>Qt::Horizontal</enum>
            </property>
            <property name="sizeType">
             <enum>QSizePolicy::Expanding</enum>
            </property>
            <property name="sizeHint" stdset="0">
             <size>
              <width>40</width>
              <height>20</height>
             </size>
            </property>
           </spacer>
          </item>
          <item row="2" column="0">
           <widget class="QLabel" name="sourceInformationLabel">
            <property name="maximumSize">
             <size>
              <width>120</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="text">
             <string>Source Information</string>
            </property>
           </widget>
          </item>
          <item row="0" column="0">
           <widget class="QLabel" name="label_10">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="maximumSize">
             <size>
              <width>110</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="toolTip">
             <string>Update to the latest version</string>
            </property>
            <property name="text">
             <string>Automatic Options</string>
            </property>
           </widget>
          </item>
         </layout>
        </item>
        <item>
         <widget class="TreeView" name="treeView">
          <property name="sizePolicy">
           <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
          <property name="minimumSize">
           <size>
            <width>0</width>
            <height>0</height>
           </size>
          </property>
          <property name="maximumSize">
           <size>
            <width>16777215</width>
            <height>16777215</height>
           </size>
          </property>
          <property name="styleSheet">
           <string notr="true">selection-color: qradialgradient(spread:repeat, cx:0.5, cy:0.5, radius:0.077, fx:0.5, fy:0.5, stop:0 rgba(0, 169, 255, 147), stop:0.497326 rgba(0, 0, 0, 147), stop:1 rgba(0, 169, 255, 147));</string>
          </property>
          <property name="rootIsDecorated">
           <bool>false</bool>
          </property>
          <property name="sortingEnabled">
           <bool>true</bool>
          </property>
          <property name="animated">
           <bool>true</bool>
          </property>
          <attribute name="headerCascadingSectionResizes">
           <bool>true</bool>
          </attribute>
          <attribute name="headerDefaultSectionSize">
           <number>200</number>
          </attribute>
          <attribute name="headerShowSortIndicator" stdset="0">
           <bool>true</bool>
          </attribute>
         </widget>
        </item>
        <item>
         <widget class="QLabel" name="label_11">
          <property name="font">
           <font>
            <weight>75</weight>
            <bold>true</bold>
           </font>
          </property>
          <property name="text">
           <string>Log</string>
          </property>
         </widget>
        </item>
        <item>
         <widget class="QTextEdit" name="textEdit"/>
        </item>
        <item>
         <spacer name="verticalSpacer_4">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
          <property name="sizeHint" stdset="0">
           <size>
            <width>20</width>
            <height>40</height>
           </size>
          </property>
         </spacer>
        </item>
       </layout>
      </widget>
     </widget>
    </item>
   </layout>
  </widget>
 </widget>
 <customwidgets>
  <customwidget>
   <class>TreeView</class>
   <extends>QTreeView</extends>
   <header>treeview.h</header>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>

Getting the following:

enter image description here

eyllanesc
  • 235,170
  • 19
  • 170
  • 241
  • I got it to work with the minimal code you posted but when I try to reproduce it in the full dockwidget it can't find mytreeview.py (ModuleNotFoundError: No module named 'mytreeview'). Is there a way to specify the path to the file? – Tim Jul 15 '19 at 10:44
  • @Tim Without a [MRE] it is impossible for me to help you – eyllanesc Jul 15 '19 at 10:46
  • @Tim I have used the structure that I have deduced from your code. What is your real structure? – eyllanesc Jul 15 '19 at 10:47
  • The dockwidget is part of a plugin for QGIS. As far as the structure goes its the same as the what you provided in your code. I'm placing the mytreeview.py at the root of the plugins folder where utility_core_dockwidget_base.ui and utility_core_dockwidget.py are located. The code you provided works for the minimal reproducible example, it just doesn't locate the file in the main program – Tim Jul 15 '19 at 10:57
  • 1
    @Tim Well, I do not use QGIS so it could not help you, check the other answers where I explain how the path is established, probably one solution is to use `sys.path.append("/path/of/treeview.py")` in main .py – eyllanesc Jul 15 '19 at 11:00
  • Fixed it by calling sys.path.append(os.path.dirname(__file__)) in utility_core_dockwidget.py as you suggested. – Tim Jul 15 '19 at 13:55