class QScrollAreaDemo ( QScrollArea ) : def __init__ ( self , * args , ** kwargs ) : super ( QScrollAreaDemo , self ) . __init__ ( * args , ** kwargs ) self . setWindowTitle ( "QScrollAreaDemo" ) self . resize ( 400 , 400 ) #只要setwidget的滚动区域尺寸大于窗口尺寸就会出现滚动条效果 widget = QWidget ( ) widget . setStyleSheet ( "background-color:red;" ) widget . setMinimumSize ( 600 , 600 ) #滚动区域 self . setWidget ( widget ) if __name__ == '__main__' : app = QApplication ( sys . argv ) mainwindows = QScrollAreaDemo ( ) mainwindows . show ( ) sys . exit ( app . exec ( ) )

效果如下:
在这里插入图片描述

2 QScrollBar

QScrollBar这个控件提供水平的或垂直的滚动条,这样可以扩大当前窗口的有效装载面积,从而装载更多的控件。

1 API

2 信号槽

3 Demo

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os,sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import  *
class QScrollBarDemo(QWidget):
    def __init__(self,*args,**kwargs):
        super(QScrollBarDemo, self).__init__(*args,**kwargs)
        self.setWindowTitle("QScrollBarDemo")
        self.resize(400,400)
        vlayout = QVBoxLayout(self)
        self.qscrollbar1 = QScrollBar()
        self.qscrollbar1.setOrientation(Qt.Horizontal) #水平
        self.qscrollbar2 = QScrollBar()
        self.qscrollbar2.setOrientation(Qt.Horizontal)  # 水平
        self.qscrollbar3 = QScrollBar(Qt.Horizontal)
        self.qscrollbar1.setRange(0,255)
        self.qscrollbar2.setRange(0, 255)
        self.qscrollbar3.setRange(0, 255)
        vlayout.addWidget(self.qscrollbar1)
        vlayout.addWidget(self.qscrollbar2)
        vlayout.addWidget(self.qscrollbar3)
        self.showlabel = QLabel("笑尽英雄啊")
        font = QFont("Times", 50, QFont.Bold)
        self.showlabel.setFont(font)
        vlayout.addWidget(self.showlabel,8)
        self.qscrollbar1.valueChanged.connect(self.slidermove)
        self.qscrollbar2.sliderMoved.connect(self.slidermove)
        self.qscrollbar3.sliderMoved.connect(self.slidermove)
    def slidermove(self,value):
        r = self.qscrollbar1.value()
        g = self.qscrollbar2.value()
        b = self.qscrollbar3.value()
        self.showlabel.setStyleSheet("color:rgb(%s,%s,%s)"%(r,g,b))
if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainwindows = QScrollBarDemo()
    mainwindows.show()
    sys.exit(app.exec())

效果如下:
在这里插入图片描述

4 样式表

滚动条分水平 垂直

QScrollBar:horizontal {
      border: 2px solid grey;
      background: #32CC99;
      height: 15px;
      margin: 0px 20px 0 20px;
  QScrollBar::handle:horizontal {
      background: white;
      min-width: 20px;
  QScrollBar::add-line:horizontal {
      border: 2px solid grey;
      background: #32CC99;
      width: 20px;
      subcontrol-position: right;
      subcontrol-origin: margin;
  QScrollBar::sub-line:horizontal {
      border: 2px solid grey;
      background: #32CC99;
      width: 20px;
      subcontrol-position: left;
      subcontrol-origin: margin;
 QScrollBar:left-arrow:horizontal, QScrollBar::right-arrow:horizontal {
      border: 2px solid grey;
      width: 3px;
      height: 3px;
      background: white;
  QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
      background: none;

在这里插入图片描述
垂直样式:

QScrollBar:vertical { background: url(images/scrollbar-vertical-bg.png); width: 9px; margin: 0px 0 0px 0; QScrollBar::handle:vertical { background: rgb(195, 195, 195); min-height: 20px; margin: 0 1px 0 2px; border-radius: 3px; border: none; /*background: qlineargradient(spread:reflect, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(164, 164, 164, 255), stop:0.5 rgba(120, 120, 120, 255), stop:1 rgba(164, 164, 164, 255));*/ /*border-image: url(images/scrollbar-vertical-thumb.png) 8px 0 8px 0 fixed;*/ QScrollBar::add-line:vertical { background: url(images/scrollbar-vertical-bg.png); ; subcontrol-position: bottom; subcontrol-origin: margin; QScrollBar::sub-line:vertical { background: url(images/scrollbar-vertical-bg.png); ; subcontrol-position: top; subcontrol-origin: margin; QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical { border: 1px solid grey; width: 3px; height: 3px; background: white; QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { background: none;
PyQt5的QScrollArea组件为一种控件容器,它的的作用是可以容纳更多的组件,如果组件过多会出现滚动条滚动条会根据容器的大小与内部组件的大小变化。 使用方法可以参考如下实例 import sys from PyQt5.QtWidgets import * class test(QWidget): def __init__(self): super().__init__() self.initui() def initui(self):
问题的提出 在GUI应用中,常常会遇到这样的问题,比如显示一幅大的图像,但显示区域有限,不能完整地显示整个图像,或者能展示界面的区域有限,但是界面中需要展现的控件、内容却很多,在限定的区域内无法全部展示。这个时候我们就需要区域是可以水平和(或)垂直方向可以滚动,以实现对整个图像或者所有控件的浏览。在PyQt中,提供滚动区控件QScrollArea来实现这个功能。 QScrollArea简介 QScrollArea滚动区域控件类提供了关于另一个窗口的滚动的视图,一个滚动区域通常用来显示一个子窗口。如果子
在PyQt中常用的图像类有4个,即QPixmap、QImage、QPicture和QBitmap。 QPixmap是专门为绘图而设计的,在绘制图片时需要使用QPixmap; QImage提供了一个与硬件无关的图像表示函数,可以用于图片的像素级访问; QPicture是一个绘图设备类,它继承自QPainter类,可以使用QPainter的begin()函数在QPicture上绘图,使用end()函数结束绘图,使用QPicture的save()函数将QPainter所使用过的绘图指令保存到文件中; QBit..
# 获取滚动条滚动到最后一个选项 scrollbar = combobox.view().verticalScrollBar() scrollbar.setValue(scrollbar.maximum()) 这样,当下拉列表框中的选项数目超过下拉列表框的高度时,就会自动滚动到最后一个选项。