可滚动区域中的多个小部件会变形

问题描述 投票:0回答:1

我有一个包含多个表的

QGroupBox
。 在某些时候,累积表格高度超过屏幕高度,因此它们会被压扁,并且每个滚动区域都会添加一个。

我想让表格保持其自然大小,并使整个

QGroupBox
可滚动。

尝试了以下方法:PyQt:如何使小部件可滚动。这没有帮助。滚动区域没有出现,看来Qt逻辑总是更喜欢挤压表格而不是展开

QGroupBox

我可以通过添加类似

myGroupBox.setMinimumHeight(3000)
的内容来使其出现。但这除了是一个丑陋的补丁之外,还会使桌子变形,使它们超出其自然尺寸,并在底部留下空白。

我该如何解决这个问题?谢谢。我在 Windows 上使用 Python3.9、PyQt5。

代码示例:

import random

from PyQt5 import QtWidgets


class SomeTable(QtWidgets.QTableWidget):
    def __init__(self):
        super().__init__()
        header = ['A', 'B', 'C', 'D', 'E', 'F']
        self.setColumnCount(len(header))
        self.setHorizontalHeaderLabels(header)
        for i in range(5):
            self.insertRow(0)
        for i in range(5):
            for j in range(6):
                self.setItem(i, j, QtWidgets.QTableWidgetItem(str(random.randint(0, 100))))


class Window(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        mygroupbox = QtWidgets.QGroupBox('this is my groupbox')
        myform = QtWidgets.QVBoxLayout()
        for i in range(10):
            myform.addWidget(SomeTable())
        mygroupbox.setLayout(myform)
        scroll = QtWidgets.QScrollArea()
        scroll.setWidget(mygroupbox)
        scroll.setWidgetResizable(True)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(scroll)


if __name__ == '__main__':
    app = QtWidgets.QApplication(['Test'])
    window = Window()
    window.showMaximized()
    app.exec_()
pyqt pyqt5
1个回答
0
投票

我找不到可以让桌子保持自然尺寸的属性。

所以我的解决方案是计算桌子高度并应用

setMinimumHeight()

© www.soinside.com 2019 - 2024. All rights reserved.