QScrollBar简介

QScrollbar滚动条控件和QSlider的行为相似,它们都继承自QAbstractSlider, 都是提供在一定范围内数值变化的交互控件,但它们的外观表现不一样,QSlider用于控制时间变化,比如播放器,有一定时长,用QSlider就非常贴切。QScrollbar常用于空间位置的变化,比如,一幅大的图像,在屏幕上只能显示其中一部分,就可以使用滚动条来控制。

和QSlider类似,QScrollbar提供垂直方向和水平方向的滚动条。

QScrollbar常用方法:

  • setMinimum(): 设置滚动条的最小值
  • setMaximum(): 设置滚动条的最大值
  • setSingleStep(): 设置滚动条的步长
  • setValue(): 设置滚动条的值
  • value(): 获得滚动条控件的值

QScrollbar中的常用信号:

  • valueChanged: 当滑块的值发生改变时发射此信号,此信号是最常用的
  • sliderPressed: 当用户按下滑块时发射此信号
  • sliderMoved: 当用户拖动滑块时发射此信号
  • sliderReleased: 当用户释放滑块时发射此信号

QScrollbar类继承关系:

测试QScrollbar

创建文件qscroolbar.py, 代码如下:

import sys
import os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QScrollBar, 
                             QSpacerItem, QSizePolicy, QVBoxLayout, QHBoxLayout, QFormLayout)
class DemoScrollBar(QWidget):
    def __init__(self, parent=None):
        super(DemoScrollBar, self).__init__(parent)       
        # 设置窗口标题
        self.setWindowTitle("实战PyQt5: QScrollBar Demo!")      
        # 设置窗口大小
        self.resize(440, 300)
        self.disp_w = 400
        self.disp_h = 280
        self.pos_horz = 0
        self.pos_vert = 0
        self.pix = QPixmap(os.path.dirname(__file__) + "/qt_py.jpg")
        img_w = self.pix.width()
        img_h = self.pix.height()
        self.disp_img = QLabel(self)
        self.disp_img.setFixedSize(self.disp_w, self.disp_h)
        vBar = QScrollBar(Qt.Vertical, self)
        vBar.setRange(0, img_h - self.disp_h)
        vBar.valueChanged.connect(self.vertPosChanged)
        hBar = QScrollBar(Qt.Horizontal, self)
        hBar.setRange(0, img_w - self.disp_w)
        hBar.setFixedWidth(self.disp_w)
        hBar.valueChanged.connect(self.horzPosChanged)
        fLayout = QFormLayout(self)
        fLayout.setWidget(0, QFormLayout.LabelRole, self.disp_img)
        fLayout.setWidget(0, QFormLayout.FieldRole, vBar)
        fLayout.setWidget(1, QFormLayout.LabelRole, hBar)
        #初始化显示区域
        self.disp_img.setPixmap(self.pix.copy(self.pos_horz, self.pos_vert, self.disp_w, self.disp_h))
        self.setLayout(fLayout)
    def horzPosChanged(self, pos):
        self.pos_horz = pos
        self.disp_img.setPixmap(self.pix.copy(self.pos_horz,  self.pos_vert, self.disp_w, self.disp_h))
    def vertPosChanged(self, pos):
        self.pos_vert = pos
        self.disp_img.setPixmap(self.pix.copy(self.pos_horz,  self.pos_vert, self.disp_w, self.disp_h))
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoScrollBar()
    window.show()
    sys.exit(app.exec()) 

运行结果如下图:

测试QScrollBar

本文知识点

  • QScrollBar的基本用法;
  • QPixmap加载图片;
  • QPixmap复制图片的部分区域。

前一篇: 实战PyQt5: 026-滑动条控件QSlider

QScrollBar简介QScrollbar滚动条控件和QSlider的行为相似,它们都继承自QAbstractSlider, 都是提供在一定范围内数值变化的交互控件,但它们的外观表现不一样,QSlider用于控制时间变化,比如播放器,有一定时长,用QSlider就非常贴切。QScrollbar常用于空间位置的变化,比如,一幅大的图像,在屏幕上只能显示其中一部分,就可以使用滚动条来控制。和QSlider类似,QScrollbar提供垂直方向和水平方向的滚动条。QScrollbar常用方法:s import sys from PyQt5 . Qt Widgets import QLabel,Q ScrollBar ,QHBoxLayout,QWidget,QApplication,QMainWindow class Q ScrollBar Demo(QMainWindow): def __init__(self): super(Q ScrollBar Demo, self).__init__() self.resize(400,
PyQt5 中文教程,翻译自 zetcode,项目地址:https://github.com/maicss/ PyQt5 -Chinese-tutoral 这个教程比较好的地方是,能讲解每一段代码的含义。 虽然 PyQt 的函数命名已经非常语义化了,但是对于新手来说,有这一步还是更好的。 所以我选择了翻译这篇教程,希望能给刚入门的你带来帮助。 备注:md文件格式可用浏览器也可用专门工具打开
valueChanged() -- 当 滚动条 的值已经发生改变时,被发射。tracking()决定在用户操作期间,这个信号是否被发射。 sliderPressed() -- 当用户开始拖动滑块时,被发射。 sliderMoved() -- 当用户拖动滑块时,被发射。 sliderReleased() -- 当用户释放滑块时,被发射。 nextLine() --当 滚动条 已经向.
PyQt5 最全61 容器之Q ScrollBar 滚动条 控件 from PyQt5 . Qt Widgets import * from PyQt5 . Qt Gui import * from PyQt5 . Qt Core import * import sys class ScrollBar (QWidget): 滚动条 控件 :Q ScrollBar 1.通过 滚动条 的变化控制其他 控件 的变化 2.通过 滚动条 值的变化控制 控件 位置的变化 def __
from PyQt5 . Qt Widgets import QApplication, QMainWindow, QPushButton class MainWindow(QMainWindow): def __init__(self): super().__init__() self.button = QPushButton('Click me!', self) self.button.clicked.connect(self.on_button_click) def on_button_click(self): self.button.setText('Button clicked!') def modify_button_text(): # 获取应用程序实例 app = QApplication.instance() # 创建主窗口 window = MainWindow() window.show() # 修改按钮文本 window.button.setText('Button modified!') # 运行应用程序 app.exec_() if __name__ == '__main__': modify_button_text() 这个示例代码演示了如何在一个外部函数中修改 pyqt5 窗口中的 控件 信息。在这个例子中,我们定义了一个 `MainWindow` 类,它包含一个按钮 控件 。当按钮被点击时,它会调用 `on_button_click` 方法,该方法会将按钮的文本设置为 "Button clicked!"。 然后,我们定义了一个名为 `modify_button_text` 的函数,它会创建一个应用程序实例和一个主窗口实例,并将窗口显示出来。然后,它会修改按钮的文本为 "Button modified!"。最后,它会运行应用程序。 如果你想在外部函数中修改 pyqt5 窗口中的 控件 信息,你可以参考这个示例代码。 背包小吉37: 这边用了作者的方法发现Python报错咋办啊 报错内容:OverflowError: Python int too large to convert to C long 好像是时间戳格式太大了没法转换成长整型 实战PyQt5: 037-表盘控件QDial m0_48737289: 请问怎样设置,才能使得当它的数值增大到180后,再旋转指针保持数值在180不变了? 实战PyQt5: 079-如何彻底删除布局中一个部件 小猪撸码: deleteLater函数会删除C++的对象不会删除python对象, 请大家注意. self.all[0].deleteLater() self.all[0]还是在的, all并不会减少 实战PyQt5: 022-布局管理之QSpiltter LA__FE_: 标题拼错了:QSplitter 实战PyQt5: 079-如何彻底删除布局中一个部件 Yzc96969898: 引用「gLayout.rowCount()」 gLayout.rowCount() 行数只能增加,布局里控件都删除完了,但是行数还是原来的行数。求大神看看怎么回事?