pyqt5 qtreeview水平滚动条不再次出现

发布于 2025-01-20 18:16:06 字数 3709 浏览 5 评论 0 原文

我有这个 QtDesigner 生成的小部件:mainuiXXXX.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MyApp(object):
    def setupUi(self, MyApp):
        MyApp.setObjectName("MyApp")
        MyApp.resize(603, 413)
        self.centralwidget = QtWidgets.QWidget(MyApp)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.treeView = QtWidgets.QTreeView(self.centralwidget)
        self.treeView.setObjectName("treeView")
        self.treeView.setHorizontalScrollMode(QtWidgets.QAbstractItemView.ScrollPerItem)  
        self.gridLayout.addWidget(self.treeView, 0, 0, 1, 1)
        MyApp.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MyApp)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 603, 29))
        self.menubar.setObjectName("menubar")
        MyApp.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MyApp)
        self.statusbar.setObjectName("statusbar")
        MyApp.setStatusBar(self.statusbar)

        self.retranslateUi(MyApp)
        QtCore.QMetaObject.connectSlotsByName(MyApp)

    def retranslateUi(self, MyApp):
        _translate = QtCore.QCoreApplication.translate
        MyApp.setWindowTitle(_translate("MyApp", "MyApp"))

和这个 MRE 代码:test.py

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QHeaderView

from PyQt5 import QtGui


from mainuiXXXX import Ui_MyApp


class MyApp(QMainWindow, Ui_MyApp):

    def __init__(self, parent=None):
        super(MyApp, self).__init__(parent)

        self.setupUi(self)

        self.model = None

        self.treeView.setHeaderHidden(True)


        self.treeView.header().setStretchLastSection(False)
        self.treeView.header().setSectionResizeMode(QHeaderView.ResizeToContents)

        self.create_tree()

        print(self.treeView.header().stretchLastSection())

    def create_tree(self):

        self.model = QtGui.QStandardItemModel()

        self.rootNode = self.model.invisibleRootItem()

        self.top = QtGui.QStandardItem('TOP')

        self.rootNode.appendRow(self.top)

        self.treeView.setModel(self.model)

        for i in range(100):

            self.mod = QtGui.QStandardItem(str('a'*i))

            # print(i)
            self.top.appendRow(self.mod)

            for i in range(3):
                self.mod2 = QtGui.QStandardItem(str(self.mod.text() + 'aaaabbb'*i))

                self.mod.appendRow(self.mod2)
                
                for i in range(3):
                    self.mod3 = QtGui.QStandardItem(str(self.mod.text() + 'aaaaccc'*i))

                    self.mod2.appendRow(self.mod3)

        self.treeView.expandAll()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    myapp = MyApp()
    myapp.show()

    try:
        sys.exit(app.exec_())
    except SystemExit:
        print('Closing Window...')

它包括

self.treeView.header().setStretchLastSection(False)
self.treeView.header().setSectionResizeMode(QHeaderView.ResizeToContents)

来自这里的:pyqt5 QTreeView 水平滚动条不显示如何使PyQt5 QScrollArea水平滚动条动态显示?< /a>

但又没有水平滚动条,这让我发疯,我明白了:

在此处输入图像描述

I've this QtDesigner generated Widget : mainuiXXXX.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MyApp(object):
    def setupUi(self, MyApp):
        MyApp.setObjectName("MyApp")
        MyApp.resize(603, 413)
        self.centralwidget = QtWidgets.QWidget(MyApp)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.treeView = QtWidgets.QTreeView(self.centralwidget)
        self.treeView.setObjectName("treeView")
        self.treeView.setHorizontalScrollMode(QtWidgets.QAbstractItemView.ScrollPerItem)  
        self.gridLayout.addWidget(self.treeView, 0, 0, 1, 1)
        MyApp.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MyApp)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 603, 29))
        self.menubar.setObjectName("menubar")
        MyApp.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MyApp)
        self.statusbar.setObjectName("statusbar")
        MyApp.setStatusBar(self.statusbar)

        self.retranslateUi(MyApp)
        QtCore.QMetaObject.connectSlotsByName(MyApp)

    def retranslateUi(self, MyApp):
        _translate = QtCore.QCoreApplication.translate
        MyApp.setWindowTitle(_translate("MyApp", "MyApp"))

and this MRE code :test.py

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QHeaderView

from PyQt5 import QtGui


from mainuiXXXX import Ui_MyApp


class MyApp(QMainWindow, Ui_MyApp):

    def __init__(self, parent=None):
        super(MyApp, self).__init__(parent)

        self.setupUi(self)

        self.model = None

        self.treeView.setHeaderHidden(True)


        self.treeView.header().setStretchLastSection(False)
        self.treeView.header().setSectionResizeMode(QHeaderView.ResizeToContents)

        self.create_tree()

        print(self.treeView.header().stretchLastSection())

    def create_tree(self):

        self.model = QtGui.QStandardItemModel()

        self.rootNode = self.model.invisibleRootItem()

        self.top = QtGui.QStandardItem('TOP')

        self.rootNode.appendRow(self.top)

        self.treeView.setModel(self.model)

        for i in range(100):

            self.mod = QtGui.QStandardItem(str('a'*i))

            # print(i)
            self.top.appendRow(self.mod)

            for i in range(3):
                self.mod2 = QtGui.QStandardItem(str(self.mod.text() + 'aaaabbb'*i))

                self.mod.appendRow(self.mod2)
                
                for i in range(3):
                    self.mod3 = QtGui.QStandardItem(str(self.mod.text() + 'aaaaccc'*i))

                    self.mod2.appendRow(self.mod3)

        self.treeView.expandAll()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    myapp = MyApp()
    myapp.show()

    try:
        sys.exit(app.exec_())
    except SystemExit:
        print('Closing Window...')

it includes the

self.treeView.header().setStretchLastSection(False)
self.treeView.header().setSectionResizeMode(QHeaderView.ResizeToContents)

from here: pyqt5 QTreeView horizontal scrollbar doesn't show up and How to make PyQt5 QScrollArea horizontal scrollbar show up dynamically?

but no horizontal scrollBar again, its drivin me crazy, I get this:

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文