Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将QTextEdit大小调整为文本大小pyqt5_Python_Python 3.x_Pyqt_Pyqt5_Qtextedit - Fatal编程技术网

Python 将QTextEdit大小调整为文本大小pyqt5

Python 将QTextEdit大小调整为文本大小pyqt5,python,python-3.x,pyqt,pyqt5,qtextedit,Python,Python 3.x,Pyqt,Pyqt5,Qtextedit,我试图使QTextEdit将其宽度值更改为输入文本的长度 但问题是,当使用resize属性时,它不会做任何事情,也不会更改大小 我遵守列表中当前单词的长度,该值是我试图作为属性宽度发送给QTextEdit的值 要得到这样的东西: from PyQt5.QtWidgets import QMainWindow,QWidget,QVBoxLayout,QApplication,QTextEdit,QPushButton,QScrollArea class Main(QMainWindow):

我试图使QTextEdit将其宽度值更改为输入文本的长度

但问题是,当使用resize属性时,它不会做任何事情,也不会更改大小

我遵守列表中当前单词的长度,该值是我试图作为属性宽度发送给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()
实际上,我需要的是,为填充qscrollara而创建的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_())
结果: