PyQt中QScrollArea使用自定义的滚动条设置步长问题

根据官网文件的内容介绍

滑块的长度通常与页面步长的值相关,通常表示滚动视图中显示的文档区域的比例。页面步长是用户按“向上翻页”和“向下翻页”键时值更改的量,并使用setPageStep() 进行设置。对行步长定义的值的较小更改是使用光标键进行的,并且此数量是使用setSingleStep() 设置的。

请注意,使用的值范围与滚动条构件的实际大小无关。在为范围和页面步长选择值时,无需考虑这一点。

 

自己理解

根据文档所述,使用setPageSstep是靠键盘的上下箭头,或者控件的上下按钮来设置,使用setSingleStep是靠鼠标的滚轮来设置,经我本人测试,似乎跟我所理解的相反,代码见下文。

我会将此控件的两种情况来展示。

第一种情况:只使用QScrollArea控件

import sys
from PyQt5.Qt import *

class Text(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("窗口标题")
        self.resize(600,500)
        self.setup_ui()
    def setup_ui(self):
        scroll_area = QScrollArea(self)
        scroll_area.move(100,100)
 

        bar = QScrollBar(scroll_area)
        scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        scroll_area.setVerticalScrollBar(bar)

        """***
        设置步长需要设置在,添加部   件之后添加
        ***"""
        print("bar控件当前的值",bar.value())
        bar.setMaximum(100)
        bar.setPageStep(1)  

        bar.setSingleStep(int(2))  

        bar.valueChanged.connect(self.t)

    def t(self,value):
        print("滑块改变后的值",value)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    t = Text()
    t.show()
    app.exec_()

运行代码,我们可以看到鼠标滑动的步长为1,键盘的步长为2.

第二种情况:在QSCrollArea控件中添加QWidget控件

import sys
from PyQt5.Qt import *

class Text(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("窗口标题")
        self.resize(600,500)
        self.setup_ui()
    def setup_ui(self):
        scroll_area = QScrollArea(self)
        scroll_area.move(100,100)
        win = QWidget()
        win.setFixedSize(1000,1000)
        scroll_area.setWidget(win)

        bar = QScrollBar(scroll_area)
        scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        scroll_area.setVerticalScrollBar(bar)

        """***
        设置步长需要设置在,添加部   件之后添加
        ***"""
        print("bar控件当前的值",bar.value())
        bar.setMaximum(100)
        bar.setPageStep(5)  #  没添加控件是滚轮,添加控件此设置失效

        bar.setSingleStep(int(2))  #  没添加控件是键盘,添加后:滚轮是步长*3,键盘是自定义设置,并使setPageStep无效果设置无效果

        bar.valueChanged.connect(self.t)

    def t(self,value):
        print("滑块改变后的值",value)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    t = Text()
    t.show()
    app.exec_()

运行代码,我们可以看到鼠标滑动的步长为setSingleStep的3倍,键盘的步长为setSingleStep的初始设置的值。并且setPageStep无效果设置无效果。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值