【问题标题】:Scrolling in QScrollArea pyqt在 QScrollArea 中滚动 pyqt
【发布时间】:2012-08-11 03:55:52
【问题描述】:

如何自动滚动滚动区域?例如,当有新的更新而不是滚动区域的视图保持不变时,我想用新的文本往下走。把它想象成一个 CMD 控制台,当你输入一个命令时,它会自动滚动输出。

【问题讨论】:

    标签: python scroll pyqt


    【解决方案1】:

    我只是想回应另一个答案,但我只是不知道在分配的空间中表达它的最佳方式。

    QScrollArea 是设计自定义 PyQt 小部件时非常有用的小部件 - 我经常使用它们。诸如推出小部件、卡片小部件之类的东西,任何您可以显示多个需要滚动的子小部件的东西都可能是一个非常有用的实用程序。我不同意 QScrollArea 本身没有多大用处的想法。

    QTextEdit 的答案解决了开发人员面临的问题 - 但只是因为它发生了问题,所以问题确实与此有关。如果您尝试滚动文本编辑,请使用该答案。

    但是,如果您正在寻找实际问题的答案并遇到此线程,则向下滚动 QScrollArea 的方法是实际修改滚动条的值。

    area = QScrollArea(parent)
    vbar = area.verticalScrollBar()
    vbar.setValue(vbar.maximum())
    

    如果你想滚动到特定区域或任何东西(比如实现 ensureCursorVisible),那么你想在区域的小部件上获取你想要滚动到的位置,计算出它的高度百分比,然后应用它垂直滚动条的值。 (伪代码)

    【讨论】:

    • QScrollBar 已经有函数 ensureVisibleensureWidgetVisible 可以垂直和水平滚动到特定点或子窗口小部件,因此无需重新实现它们。
    【解决方案2】:

    使用QTextEdit.moveCursor 设置要滚动到的位置,然后使用QTextEdit.ensureCursorVisible 滚动到该位置:

    textedit.moveCursor(QtGui.QTextCursor.End)
    textedit.ensureCursorVisible()
    

    【讨论】:

    • 我很困惑......这个问题是针对 QScrollArea 还是 QTextEdit - 因为如果它针对 QSCrollArea,那么这将不起作用。你必须这样做: area.verticalScrollBar().setValue(area.verticalScrollBar().maximum()) 如果它是用于 QTextEdit,那么这个问题会产生误导......
    • @EricHulser。这个问题清楚地提到了文字,所以我只是假设它与QTextEdit 相关——毕竟QScrollArea 本身并没有多大用处。
    猜你喜欢
    • 2011-10-11
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2013-09-13
    相关资源
    最近更新 更多