我有一类从 QTextEdit 子类化的文本框,它会自动调整其内容的大小,并且在调整窗口大小时也会调整大小。
文本可以很长,并且文本框会自动换行文本,因此当水平空间增加时,文本框的高度会缩小,因为换行较少。
问题是当文本框缩小时,它们的底部边框将丢失,除非窗口的宽度缩小,否则它们将只有左、上和右边框。
最小的,可重现的例子:
from PyQt6.QtCore import *
from PyQt6.QtGui import *
from PyQt6.QtWidgets import *
class Editor(QTextEdit):
def __init__(self):
super().__init__()
self.textChanged.connect(self.autoResize)
def autoResize(self):
self.document().setTextWidth(self.viewport().width())
margins = self.contentsMargins()
height = int(self.document().size().height() + margins.top() + margins.bottom())
self.setFixedHeight(height)
def resizeEvent(self, e: QResizeEvent) -> None:
self.autoResize()
class Window(QWidget):
def __init__(self):
super().__init__()
self.resize(405, 720)
frame = self.frameGeometry()
center = self.screen().availableGeometry().center()
frame.moveCenter(center)
self.move(frame.topLeft())
self.vbox = QVBoxLayout(self)
self.vbox.setAlignment(Qt.AlignmentFlag.AlignTop)
self.textbox = Editor()
self.textbox.setText(
'Symphony No.6 in F, Op.68 \u2014Pastoral\u2014I. Erwachen heiterer Empfindungen bei der Ankunft auf dem Lande\u2014 Allegro ma non troppo'
)
self.vbox.addWidget(self.textbox)
app = QApplication([])
window = Window()
window.show()
app.exec()
当您单击最大化按钮时,文本框从三个换行变为一行,并且在您恢复窗口之前,底部边框将丢失。
我想重新绘制边框,我已经谷歌搜索了 8 个多小时但找不到解决方案,我尝试添加以下autoResize
功能无济于事:
self.update()
self.viewport().update()
self.repaint()
self.viewport().repaint()
self.setFrameRect(QRect(0, 0, self.width(), height))
如何才能做到这一点?