下面的代码会创建一个包含QTextBrowser
小部件的窗口。
使用时,新的文本行添加到QTextBrowser
五秒钟
它的.insertPlainText()
方法。
只要文本填充整个字段QTextBrowser
,就会自动添加滚动条。但它没有向下滚动,因此用户始终可以看到(或可读)文本的最后一行。
我想知道如何让QTestBrowser
自动向下滚动,以便文本的最后一行始终在其文本字段内或可见。如何实现呢?
截图:
代码:
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_()
答案 0 :(得分:3)
只需使用.append
代替.insertPlainText
即可确保自动滚动:
self._console.append('%s : '%n)
答案 1 :(得分:1)
由于QTextBrowser
是QTextEdit
小部件的子类,我们可以使用其.ensureCursorVisible()
方法。
要使QTextBrowser
自动向下滚动,因为它正在填充文本,我们需要做的就是添加一个额外的行以启用其属性来负责此功能:
self._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_()