python - 使 QTextEdit 大小适合文本大小 pyqt5
问题描述
我尝试让 QTextEdit 将其宽度值更改为在其中输入的文本的长度。
但问题是,当使用 resize 属性时,它不会做任何事情,也不会改变大小
我遵守列表中当前单词的长度,该值是我尝试作为属性 width() 发送到 QTextEdit 的值
得到这样的东西:
from PyQt5.QtWidgets import QMainWindow,QWidget,QVBoxLayout,QApplication,QTextEdit,QPushButton,QScrollArea
class Main(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.lista = ["one","two","abcdefghijklmn","zxyw","xyxyxyxyx"]
self.widget = QWidget(self)
self.layout = QVBoxLayout(self.widget)
self.area = QScrollArea(self)
self.area.resize(400,300)
self.area.setWidget(self.widget)
self.area.setWidgetResizable(True)
self.plain =QTextEdit(self)
self.plain.move(0,305)
self.plain.resize(400,50)
self.boton = QPushButton(self)
self.boton.move(0,360)
self.boton.setText("Press")
self.boton.clicked.connect(self.Test)
def Test(self):
for i in self.lista:
longitud = len(i)*6.3
print(longitud)
self.text = QTextEdit(self)
self.text.document().setPlainText(i)
self.text.setReadOnly(True)
self.text.resize(longitud,10)
self.layout.addWidget(self.text)
app = QApplication([])
m = Main()
m.show()
m.resize(600,400)
app.exec()
实际上我需要的是为填充 QScrollArea 而创建的 QTextEdit 符合文本字符长度的大小
这是我得到的结果,但我需要的是 QTextEdit 的宽度()到行结束的位置
解决方案
这是我尝试使用字体度量来测量文本框内容的大小来解决这个问题:
import sys
from PyQt5.QtGui import QFontMetrics
from PyQt5.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QApplication, QTextEdit, QPushButton, QScrollArea
class Main(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.lista = ["one", "two", "abcdefghijklmn", "zxyw", "xyxyxyxyx"]
self.widget = QWidget(self)
self.layout = QVBoxLayout(self.widget)
self.area = QScrollArea(self)
self.area.resize(400,300)
self.area.setWidget(self.widget)
self.area.setWidgetResizable(True)
self.plain = QTextEdit(self)
self.plain.move(0,305)
self.plain.resize(400,50)
self.boton = QPushButton(self)
self.boton.move(0,360)
self.boton.setText("Press")
self.boton.clicked.connect(self.Test)
def Test(self):
for i in self.lista:
text = QTextEdit(self)
text.document().setPlainText(i)
font = text.document().defaultFont()
fontMetrics = QFontMetrics(font)
textSize = fontMetrics.size(0, text.toPlainText())
w = textSize.width() + 10
h = textSize.height() + 10
text.setMinimumSize(w, h)
text.setMaximumSize(w, h)
text.resize(w, h)
text.setReadOnly(True)
self.layout.addWidget(text)
if __name__ == '__main__':
app = QApplication(sys.argv)
m = Main()
m.show()
m.resize(600, 400)
sys.exit(app.exec_())
结果:
推荐阅读
- typescript - 在 Typescript 中,如何在我知道键但不知道路径的情况下检索深度嵌套的属性类型?
- flutter - 尝试按照文档使用 StateNotifierProvider
- c# - 错误 CS0122 'Rigidbody.AddForce(Vector3)' 由于其保护级别而无法访问
- python-3.x - 在 Django 包中添加对 Alpine.js 的支持
- python - Python Mock_requests:我可以在 Mocker 的 url 参数中使用通配符吗?与pytest一起使用时如何实现url的模式匹配?
- coordinates - 如何测量从矢量坐标到光栅像素的距离?
- xslt - 如何将脚本生成的文本复制到输出文件的另一部分?
- spfx - SPFx 1.12.1 项目中 @fluentui/react-file-type-icons 的 tsc 错误
- r - ROI求解器多参数目标函数
- html - 如何在 CSS 中的网格中设置图片中的这种配置?