首页 > 解决方案 > pyQt5 滚动条自动跟随

问题描述

当 y 位置不在末尾时,我似乎无法让 pyqt5 中的滚动条自动跟随和不自动跟随。

我试过这个:

    ccursor=self.textCursor()
    sbar=self.verticalScrollBar()
    # get the max value
    csbarval=float(sbar.value())
    maxsbarval=float(sbar.maximum())

    print("sbar value:{}".format(csbarval))
    print("sbar max:{}".format(maxsbarval))

    self.append(data)
    if (float(maxsbarval) > 0.0) and (csbarval/maxsbarval > 0.98):
        ccursor.movePosition(QtGui.QTextCursor.End)

那里有可以自动执行此操作的api吗?

标签: pythonlinuxpyqtpyqt5

解决方案


是的,所以我在一个安静的地方稍微考虑了一下,结果如下:

class TEdit(QtWidgets.QTextEdit):
 def scrollbarBehaviour(self,data):

  scrollbar=self.verticalScrollBar()
  current_pos=scrollbar.value()
  current_max=scrollbar.maximum()

  at_bottom_of_text=(current_pos>=current_max -4)

  self.append(data)
  if at_bottom_of_text:
   scrollbar.setValue(scrollbar.maximum())
  else:
   scrollbar.setValue(current_pos)

要注意的部分是在将数据附加到文本区域之前确定滚动条是否处于最大/结束位置。滚动条也需要明确设置,否则它会自动滚动到最后。


推荐阅读