Я создаю сетку QTextEdit с подмножеством HTML, чтобы показать некоторые данные в интерфейсе в PyQt.
На данный момент я получаю GridLayout и QFrame, которые содержат его, делая все, что хотят, и у меня нет возможности подогнать их под размер QTextEdit. Я игрался с SizePolicy, но не работает. посмотрите на изображении, как появляется дополнительное пространство сбоку от каждого QText и как GridLayout обрезает QTextEdit по высоте.
Единственный способ заставить его работать - установить правильный размер QFrame, чтобы все подошло, но поскольку размер QTextEdit можно настроить, я бы хотел, чтобы QFrame просто соответствовал тому, что он должен содержать, вместо того, чтобы получать свободу воли + _+
Обратите внимание, что GridLayout обычно больше, чем главное окно, поэтому ему не нужно вписываться в окно, поэтому зачем нужен scrollArea.
Как и должно быть:
обратите внимание, что изображение, которое я хочу, было получено путем добавления этой строки (в 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_())