我正在构建一个带有 HTML 子集的 QTextEdit 网格,以在 PyQt 的界面中显示一些数据。
目前我得到了 GridLayout 和包含它的 QFrame 做任何他们想做的事情,我无法让它们适合 QTextEdit 大小。我使用 SizePolicy 格子,但不起作用。从图像中可以看出每个 QText 的侧面如何出现额外的空间,以及 GridLayout 如何在高度上削减 QTextEdit。
使它工作的唯一方法是,如果我设置正确的 QFrame 大小以使所有内容都适合,但是由于 QTextEdit 的大小是可定制的,我希望 QFrame 简单地适合它必须包含的任何内容,而不是获得自由意志 + _+
请注意,GridLayout 通常比主窗口大,因此它不需要适合窗口,因此为什么需要滚动区域。
应该是:
请注意,我想要的图像已添加此行(在 MainFrame() 中):
container.resize(1100,1360)
正如我所说,我想获得相同的行为,但没有指定 QFrame 的维度,这应该适合内容(HTML 表的子集)
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from random import *
class Box(QTextBrowser):
def __init__(self):
super().__init__()
self.setText('''
<table border="0" cellspacing="0" cellpadding="5" style="background-color: rgba(119, 212, 212, 0.7);">
<tr>
<td width="100">
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
</td>
<tr>
<tr>
<td>
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
</td>
<tr>
</table>
''')
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setContentsMargins(0,0,0,0)
cstring ="""
QTextBrowser {
border: 0;
background-color: #<---->;
margin: 0px;
padding-left:0;
padding-top:0;
padding-bottom:0;
padding-right:0;
}
"""
ncol = randint(300000, 999999)
cstring = cstring.replace('<---->', str(ncol))
self.setStyleSheet(cstring)
class MainFrame(QScrollArea):
def __init__(self):
super().__init__()
container = QFrame(self)
layout = QGridLayout(container)
for row in range(0, 5):
for col in range(0, 10):
QGridLayout.addWidget(layout, Box(), row, col)
self.setWidget(container)
container.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
layout.setContentsMargins(0,0,0,0)
layout.setSpacing(0)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MainFrame()
sys.exit(app.exec_())