如何自动滚动QT文本字段Widg

2024-04-24 22:42:05 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码用QTextBrowser小部件创建一个窗口。 在五秒钟内,使用 它的.insertPlainText()方法。 一旦文本填满整个字段,QTextBrowser就会自动添加一个滚动条。但是它不会向下滚动,因此最后一行文本将始终可见(或可读)。在

我想知道如何使QTestBrowser自动向下滚动,以便文本的最后一行始终在其文本字段内或可见。如何实现?在

截图:enter image description here

代码:

import sys, time
from PyQt4 import QtCore, QtGui

class MyDialog(QtGui.QDialog):
    def __init__( self, parent = None ):
        super(MyDialog, self).__init__(parent)
        self._console = QtGui.QTextBrowser(self)        
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self._console)
        self.setLayout(layout)
    def updateField(self):
        for m in range(5):
            for n in range(100):
                self._console.insertPlainText('%s : '%n)
                QtGui.qApp.processEvents()
            time.sleep(1)

if ( __name__ == '__main__' ):
    app = None
    if ( not QtGui.QApplication.instance() ):
        app = QtGui.QApplication([])
    dlg = MyDialog()
    dlg.show()
    dlg.updateField()
    if ( app ): app.exec_()

Tags: 代码文本importselfappiftimedef
2条回答

由于QTextBrowser是来自QTextEdit小部件的子类,因此我们可以使用它的.ensureCursorVisible()方法。在

要使QTextBrowser在填充文本时自动向下滚动,我们只需添加一行以启用其负责此功能的属性: 自我_console.ensureCursorVisible()

以下是工作代码解决方案:

import sys, time
from PyQt4 import QtCore, QtGui

class MyDialog(QtGui.QDialog):
    def __init__( self, parent = None ):
        super(MyDialog, self).__init__(parent)
        self._console = QtGui.QTextBrowser(self) 
        self._console.ensureCursorVisible()       
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self._console)
        self.setLayout(layout)
    def updateField(self):
        for m in range(5):
            for n in range(100):
                self._console.insertPlainText('%s : '%n)                    
                QtGui.qApp.processEvents()
            time.sleep(1)

if ( __name__ == '__main__' ):
    app = None
    if ( not QtGui.QApplication.instance() ):
        app = QtGui.QApplication([])
    dlg = MyDialog()
    dlg.show()
    dlg.updateField()
    if ( app ): app.exec_()

只需使用.append而不是.insertPlainText来确保自动滚动:

    self._console.append('%s : '%n)

相关问题 更多 >