2014-06-28 53 views
0

下面的代码创建一个包含QTextBrowser构件的窗口。 使用 其.insertPlainText()方法将新行文本添加到QTextBrowser五秒钟。 只要文本填满整个字段QTextBrowser就会自动添加一个滚动条。但它没有向下滚动,所以文本的最后一行将始终可见(或可读)的用户。如何自动滚动QT文本字段构件

我想知道如何使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_() 
+0

[如何在QPlainTextEdit或QTextEdit区域中更改的情况下如何将滚动条编程为跳至底部/顶部?](http://stackoverflow.com/questions/4939151/how-to-program-scrollbar-to-跳转至底部顶式的病例的变化合qplaintexted) – Trilarion

回答

3

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

self._console.append('%s : '%n) 
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_()