【问题标题】:Python PyQt5 All text in QTextBrowser becomes 'hyperactive'Python PyQt5 QTextBrowser 中的所有文本都变得“过度活跃”
【发布时间】:2020-03-17 02:00:39
【问题描述】:

我对 QTextBrowser 中的文本有疑问。我有类似的代码:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)
        self.textBox = QTextBrowser(centralWidget)

        self.textBox.setOpenExternalLinks(True)

        self.button = QPushButton(centralWidget)
        self.button.setText("PUSH")
        self.button.clicked.connect(self.pressed)

        self.grid = QGridLayout(centralWidget)
        self.grid.addWidget(self.button)
        self.grid.addWidget(self.textBox)

    def pressed(self):
        id = 49309034
        url_name = "test_link"
        link = '<a href = https://stackoverflow.com/questions/{0}> {1} </a>'.format(id, url_name)
        dict = {'Key': 'Value', link: 'Test link'}
        for key, value in dict.items():
            self.textBox.append('{0}: {1}'.format(key, value))
        self.textBox.append("")


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

所以,当我按下按钮时,我得到:

但是,如果我点击链接,然后再次按下按钮 - 所有文本都变得“过度活跃”:

我认为,问题出在“下一行”。因为我已经尝试过这样的代码并且它工作正常:

string = ""
for key, value in dict.items():
    string += '{0}: {1}'.format(key, value) + '; '
self.textBox.append(string)

点击网址并按下按钮后

你能帮我解决这个问题吗?

【问题讨论】:

  • 所有文字都变得“过度活跃”是什么意思。只有“测试链接”显示为超链接。

标签: python-3.x url pyqt5 qtextbrowser


【解决方案1】:

在向 QTextBrowser 添加行之前尝试移动光标。 例如,像这样:

self.textBox.moveCursor(QTextCursor.Start)

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)
        self.textBox = QTextBrowser(centralWidget)

        self.textBox.setOpenExternalLinks(True)

        self.button = QPushButton(centralWidget)
        self.button.setText("PUSH")
        self.button.clicked.connect(self.pressed)

        self.grid = QGridLayout(centralWidget)
        self.grid.addWidget(self.button)
        self.grid.addWidget(self.textBox)

    def pressed(self):

        self.textBox.moveCursor(QTextCursor.Start)       # <---

        id = 49309034
        url_name = "test_link"
        link = '<a href = https://stackoverflow.com/questions/{0}> {1} </a>'.format(id, url_name)
        dict = {'Key': 'Value', link: 'Test link'}
        for key, value in dict.items():
            self.textBox.append('{0}: {1}'.format(key, value))
        self.textBox.append("")


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

【讨论】:

  • 非常感谢!这个问题我想了很久。
  • 更具可读性:self.textBox.moveCursor(QTextCursor.Start)
猜你喜欢
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
相关资源
最近更新 更多