QTextEdit将setLineWrapMode设置为NoWrap会导致很大的延迟。

1 人关注

我正在使用 QTextEdit 来显示一个表格。

当我试图通过使用 setLineWrapMode(qtw.QTextEdit.NoWrap) 来禁用换行时,显示表格需要很多时间。

这是预期的行为吗?我怎样才能减少延迟呢?

最低限度的工作实例

import sys
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtGui as qtg
from PyQt5 import QtCore as qtc
class MainWindow(qtw.QMainWindow):
    def __init__(self):
        super().__init__()
        textedit = qtw.QTextEdit()
        textedit.setReadOnly(True)
        textedit.setLineWrapMode(qtw.QTextEdit.NoWrap) #Commenting this line removes the delay
        headers = ["#", "Name", "Address","Website"]
        cursor = textedit.textCursor()
        tableFormat = qtg.QTextTableFormat()
        table=cursor.insertTable(201, 4, tableFormat)
        for header in headers:
            cursor.insertText(header)
            cell=table.cellAt(cursor)
            format = cell.format()
            format.setBackground(qtg.QColor("#CCE8FF"))
            cell.setFormat(format)
            cursor.movePosition(qtg.QTextCursor.NextCell)
        for i in range(200):
            cursor.insertText(str(i+1))
            cursor.movePosition(qtg.QTextCursor.NextCell)
            cursor.insertText('David')
            cursor.movePosition(qtg.QTextCursor.NextCell)
            cursor.insertText('6th Lane, 4th street, 9th state')
            cursor.movePosition(qtg.QTextCursor.NextCell)
            cursor.insertHtml('<a href="www.google.com">Google</a>')
            cursor.movePosition(qtg.QTextCursor.NextCell)
        self.setCentralWidget(textedit)
        self.show()
if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    mw = MainWindow()
    sys.exit(app.exec())
    
2 个评论
textedit.setLineWrapMode (qtw.QTextEdit.NoWrap) 行放在 __init__ 方法中的最后。
inxp
哇,这很有效。非常感谢。如果你把它作为答案,加上一些解释,我可以把它标记为接受。
python
pyqt
inxp
inxp
发布于 2020-07-31
1 个回答
S. Nick
S. Nick
发布于 2020-07-31
已采纳
0 人赞同

我假设在循环 for i in range (200): 中 每次表发生变化时,它都会检查 QTextEdit.NoWrap 是否被尊重。同时,很明显,它在当前存在的整个表上进行这种安装。 对不起,我的英语不好。

textedit.setLineWrapMode(qtw.QTextEdit.NoWrap) 行放在 __init__ 方法中的最后。

import sys
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtGui as qtg
from PyQt5 import QtCore as qtc
class MainWindow(qtw.QMainWindow):
    def __init__(self):
        super().__init__()
        textedit = qtw.QTextEdit()
        textedit.setReadOnly(True)
#        textedit.setLineWrapMode(qtw.QTextEdit.NoWrap) # Commenting this line removes the delay
        headers = ["#", "Name", "Address","Website"]
        cursor = textedit.textCursor()
        tableFormat = qtg.QTextTableFormat()
        table=cursor.insertTable(201, 4, tableFormat)
        for header in headers:
            cursor.insertText(header)
            cell=table.cellAt(cursor)
            format = cell.format()
            format.setBackground(qtg.QColor("#CCE8FF"))
            cell.setFormat(format)
            cursor.movePosition(qtg.QTextCursor.NextCell)
        for i in range(200):
            cursor.insertText(str(i+1))
            cursor.movePosition(qtg.QTextCursor.NextCell)
            cursor.insertText('David')
            cursor.movePosition(qtg.QTextCursor.NextCell)
            cursor.insertText('6th Lane, 4th street, 9th state')
            cursor.movePosition(qtg.QTextCursor.NextCell)
            cursor.insertHtml('<a href="www.google.com">Google</a>')
            cursor.movePosition(qtg.QTextCursor.NextCell)
        self.setCentralWidget(textedit)
#        self.show()
        textedit.setLineWrapMode(qtw.QTextEdit.NoWrap)                    # +++
if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)