PyQt5_信号与槽_QScrollBar组件和其参数

PyQt6第四章控件功能之4.2常用控件(4.3.3滚动条QScrollBar) 滚动条包括水平滚动条 HorizontalScrollBar垂直滚动条VerticalScrollBar,可以扩大当前窗口的有效装载面积,对应QScrollBar类。valueChanged:当滚动条的值发生改变时发射该信号。sliderMoved:当用户拖动滚动条的滑块时发射该信号。setMinimum():设置滚动条最小值。setMaximum():设置滚动条最大值。setValue():设置滚动条的值。value():获取滚动条的当前值。Horizontal:水平滚动条 阅读详情

信号与槽

  1. 信号:

    其实就是事件(按钮点击 、内容发生改变 、窗口的关闭事件) 或者是 状态 (check选中了, togglebutton 切换)

    当程序触发了某种状态或者发生了某种事件(比如:按钮被点击了, 内容改变等等),那么即可发射出来一个信号

  2. 若想捕获这个信号,然后执行相应的逻辑代码,那么就需要使用到 实际上是一个函数, 当信号发射出来后,会执行与之绑定的函数

  3. 对象.信号.connect(槽函数)
    

案例一:遍历并动态输出字符串

# -*- coding: utf-8 -*-
# 学习时间: 2022/10/27 17:11

__author__ = 'He XK'

import sys
import time

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


class MyWindow(QWidget):
    # 在内部函数外定义全局变量
    # 传入参数为str,表示可以接受一个字符串的信号参数
    my_signal = pyqtSignal(str)

    def __init__(self):
        super(MyWindow, self).__init__()
        self.container_init()
        # 定义一个列表,用于存放输入输入进去的信息
        self.info_history = []

    def container_init(self):
        self.resize(500, 300)
        # 整体框架的垂直布局
        container_v_layout = QVBoxLayout()

        # 创建一个Label对象
        # 用Label来显示信息
        self.info_label = QLabel('')
        self.info_label.resize(400, 15)
        # 设置自动换行
        self.info_label.setWordWrap(True)
        self.info_label.setAlignment(Qt.AlignTop)

        # 创建一个滚动条对象
        scroll = QScrollArea()
        scroll.setWidget(self.info_label)

        # 创建垂直布局器
        v_layout = QVBoxLayout()
        v_layout.addWidget(scroll)

        # 水平布局器存放按钮
        # 并通过弹簧让其居中显示
        h_layout = QHBoxLayout()
        btn = QPushButton('开始检测', self)

        btn.clicked.connect(self.btn_check)
        h_layout.addStretch(1)
        h_layout.addWidget(btn)
        h_layout.addStretch(1)

        container_v_layout.addLayout(v_layout)
        container_v_layout.addLayout((h_layout))

        self.setLayout(container_v_layout)

        self.my_signal.connect(self.signal_slot)

    # 与信号绑定的槽函数
    # 传入的info是一个字符串
    def signal_slot(self, info):
        # 打印info字符串
        print(info)
        # 在self对象属性的info_history列表中新增传递的info
        self.info_history.append(info)
        # 重新设置label元素的文本
        # 本身只是一个info_label
        # 重新设置文本,用字符串拼接。
        self.info_label.setText('\n'.join(self.info_history))
        # 重新调整文本的高
        self.info_label.resize(400, 15 * len(self.info_history))
        # 更新内容
        self.info_label.repaint()

    def btn_check(self):
        for index, item in enumerate(["192.168.1.%d" % x for x in range(1, 256)]):
            info = '正在检查 %s 的漏洞...' % item
            if index % 6 == 0:
                self.my_signal.emit(info + '|| 发现漏洞 ||')
            time.sleep(0.01)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    w = MyWindow()
    w.show()

    sys.exit(app.exec_())

以一个滚动栏的形式显示检查的内容,所有的内容是有一个列表拼接而成的字符串。

在这里插入图片描述

首先在类中声明一个信号,这个信号可以传递一个字符串。

my_signal = pyqtSignal(str)

定义初始化函数,并且新建self.msg_history = list()用于存储信息。

    def __init__(self):
        super().__init__()
        self.init_ui()
        self.msg_history = list()  # 用来存放消息

定义一个与信号绑定的槽函数。

目的是修改并更新info_history的内容;

先给该列表追加传入的info,之后执行self.info_label.setText('\n'.join(self.info_history)用于将该列表中的所有内容拼接成一个字符串;

此时的主窗体中仍是只有一个Label控件,所以要重新设置控件的大小,使用self.info_label.resize(400, 15 * len(self.info_history)调整info_label控件大小;

最后刷新该控件self.info_label.repaint()

    # 与信号绑定的槽函数
    # 传入的info是一个字符串
    def signal_slot(self, info):
        # 打印info字符串
        print(info)
        # 在self对象属性的info_history列表中新增传递的info
        self.info_history.append(info)
        # 重新设置label元素的文本
        # 本身只是一个info_label
        # 重新设置文本,用字符串拼接。
        self.info_label.setText('\n'.join(self.info_history))
        # 重新调整文本的高
        self.info_label.resize(400, 15 * len(self.info_history))
        # 更新内容
        self.info_label.repaint()

窗体UI函数,这一部分内容较多。

整体的主窗体可以分为两个布局,主体的垂直布局和下方的水平布局。

所有的信息文本是通过Label控件显示,先声明一个空的Label控件,设定其大小,同时注意self.info_label.setWordWrap(True)实现根据文本中的内容自动换行;self.info_label.setAlignment(Qt.AlignTop)实现整体文本的置顶,若不加这句话会导致文本控件慢慢向下。

声明一个滚动条对象QScrollArea(),并设定一个小组件,当小组件超出固定大小的范围时生成滚动条。

题外话:还具有QScrollBar组件,可以生成水平和垂直的滚动条。

最后,为信号绑定槽函数。

    def container_init(self):
        self.resize(500, 300)
        # 整体框架的垂直布局
        container_v_layout = QVBoxLayout()

        # 创建一个Label对象
        # 用Label来显示信息
        self.info_label = QLabel('')
        self.info_label.resize(400, 15)
        # 设置自动换行
        self.info_label.setWordWrap(True)
        self.info_label.setAlignment(Qt.AlignTop)

        # 创建一个滚动条对象
        scroll = QScrollArea()
        scroll.setWidget(self.info_label)

        # 创建垂直布局器
        v_layout = QVBoxLayout()
        v_layout.addWidget(scroll)

        # 水平布局器存放按钮
        # 并通过弹簧让其居中显示
        h_layout = QHBoxLayout()
        btn = QPushButton('开始检测', self)

        btn.clicked.connect(self.btn_check)
        h_layout.addStretch(1)
        h_layout.addWidget(btn)
        h_layout.addStretch(1)

        container_v_layout.addLayout(v_layout)
        container_v_layout.addLayout((h_layout))

        self.setLayout(container_v_layout)

        self.my_signal.connect(self.signal_slot)

点击函数部分。

def btn_check(self):
    for index, item in enumerate(["192.168.1.%d" % x for x in range(1, 256)]):
        info = '正在检查 %s 的漏洞...' % item
        if index % 6 == 0:
           self.my_signal.emit(info + '|| 发现漏洞 ||')
        time.sleep(0.01)

案例二:滑动条改变字体颜色


# -*- coding: utf-8 -*-
# 学习时间: 2022/10/27 19:45

__author__ = 'He XK'

import sys
import time

from PyQt5.QtGui import QPalette, QColor
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


class MyWindow(QWidget):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.container_init()

    def container_init(self):
        # 程序垂直布局
        v_layout = QVBoxLayout()
        # 程序主体水平布局
        h_layout = QHBoxLayout()

        # 声明一段文字label
        self.label = QLabel('Drag scrollbar sliders to change color!!!')
        self.label.setStyleSheet('font-size: 20px;')
        v_layout.addWidget(self.label)

        # 生成三个滑动条对象
        self.scroll1 = QScrollBar(Qt.Horizontal)
        self.scroll2 = QScrollBar(Qt.Horizontal)
        self.scroll3 = QScrollBar(Qt.Horizontal)
        # 设定滑动条代表的最大值255
        self.scroll1.setMaximum(255)
        self.scroll2.setMaximum(255)
        self.scroll3.setMaximum(255)
        # 绑定函数
        self.scroll1.sliderMoved.connect(self.slider_fun)
        self.scroll2.sliderMoved.connect(self.slider_fun)
        self.scroll3.sliderMoved.connect(self.slider_fun)

        v_layout.addWidget(self.scroll1)
        v_layout.addWidget(self.scroll2)
        v_layout.addWidget(self.scroll3)

        self.setLayout(v_layout)
        self.resize(400, 400)

    def slider_fun(self):
        print(self.scroll1.value(), self.scroll2.value(), self.scroll3.value())
        palette = QPalette()
        color = QColor(self.scroll1.value(), self.scroll2.value(), self.scroll3.value(), 255)
        palette.setColor(QPalette.Foreground, color)
        self.label.setPalette(palette)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    w = MyWindow()
    w.show()

    sys.exit(app.exec_())


在这里插入图片描述

QScrollBar可以生成水平或垂直方向的滑动条。参数Qt.Horizontal生成水平方向,默认是垂直方向。

QPalette是调色板。

9 PyQt5 QScrollArea滚动区域QScrollBar滚动条 PyQt5 滚动区域滚动条 阅读详情

相关推荐

06.PyQt5高级界面控------PyQt5编程开发

一、表格树    表格树解决的问题是如何在一个控件中有规律地呈现更多的数据。解决该问题的两种控件类为表格结构的控件类,树形结构的控件类。1、QTableView    若一个应用一批数据(如数组、列表)进行交互后要以表格的形式输出这些信息的话,就用QTableView类。在QtableView中可以使用自定义的数据模型来显示内容,通过setModel来绑定数据源,可用的模式如下:    QS...

爱草莓的番茄酱的博客 1万+

PyQt学习笔记:深入了解QScrollBarQAbstractSlider滚动条部件功能

在上面的代码中,我们创建了一个名为CustomSlider的自定义滚动条类,继承自QAbstractSlider。QAbstractSlider是QScrollBar的基类,它定义了一些共享的滚动条功能。QScrollBar是QAbstractSlider的一个具体实现,提供了更多的滚动条定制选项。在PyQt中,QScrollBarQAbstractSlider是用于创建滚动条部件的重要类。本文将详细介绍QScrollBarQAbstractSlider的功能,并提供相应的Python源代码示例。

DevScript的博客 142

PyQt5高级界面控件之QScrollBar Python

QScrollBarPyQt5中的一个高级界面控件,它提供了一个可滚动的滚动条,用户可以通过滑动滚动条来改变相关部件的值或位置。本文将介绍如何使用PyQt5中的QScrollBar控件,并提供相应的源代码示例。通过使用QScrollBar,我们可以为我们的应用程序添加滚动功能,并根据需求自定义滚动条的外观行为。除了基本的滚动条外,QScrollBar还提供了一些其他的功能,例如设置滚动条的最小值最大值,设置滚动条的初始值,以及自定义滚动条的样式。方法设置滚动条的初始值。方法设置滚动条的最小值,通过。

BUG?不存在的! 709

PyQtPython+Qt)学习随笔:QScrollBar以及QAbstractSlider滚动条部件功能详解

专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一、概述 在Designer输入部件中Horizontal Scroll BarVertical Scroll Bar都是滚动条部件,实际上这2个部件对应同一个类QScrollBar。在需要从QAbstractItemView派生子类提供滚动条...

老猿Python 3487

Pyqt5 scroll 滑动(滚动)条对动态增加的控件进行控制(保姆级教程)

使用Pyqt5中的scroll完成动态控件的控制,并且附带有如何删除Layout中的控件。

Yibaomeimei的博客 8819

PyQt5QScrollBar 学习笔记

本文介绍了PyQt5中的QScrollBar控件使用指南。主要内容包括:QScrollBar的基本概念、两种方向(水平垂直)及简单示例;常用方法如设置范围、步长、滑块位置等;信号机制函数的使用方式;三个实用场景案例(字体大小控制、文本编辑联动、图片缩放控制);以及QSlider的主要区别。通过代码示例详细展示了如何创建、配置应用QScrollBar控件,帮助开发者实现GUI程序中的滚动功能。

学习与分享 1671

实战PyQt5: 027-滚动条控件QScrollBar

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

seniorwizard的专栏 8365

PyQt5高级界面控件之QScrollBar(十)

前言 可以看到,前面介绍的几个窗口控件的共同点是新建一些窗口来装载更多的控件,而QScrollBar提供了另一种思路:这个控件提供水平的或垂直的滚动条,这样可以扩大当前窗口的有效装载面积,从而装载更多的控件 QScrollBar类中常用的信号 信号 含义 valueChanged 当...

如有侵权,请联系作者删除 992

PyQt入门指南二十三 QScrollBar滚动条组件详解

你可以通过设置同的属性来自定义滚动条的外观行为。例如,你可以设置滚动条的样式表来改变它的颜色外观。""")通过上述示例,你应该对QScrollBar有了基本的了解。你可以根据需要进一步自定义滚动条的样式行为,以满足你的应用程序的需求。

Life is not divided 763

OpenCV-PyQT项目实战(6)项目案例02:滚动条应用

本节介绍两个 OpenCV-PyQt 项目案例,通过案例学习滚动条等调节输入控件。 案例1 使用滑动(QSlider)调节模糊尺度。 案例2 模拟 PhotoShop AcdSee 中的图像亮度对比度方法,通过手动调节阴影、中间调高光参数设置,调节图像的亮度对比度。

youcans的博客 2910

pythonscrollbar布局_python GUI库图形界面开发PyQt5滚动条控件QScrollBar详细使用方法实例...

PyQt5滚动条控件QScrollBar简介可以看到,前面介绍的几个窗口控件的共同点是新建一些窗口来装载更多的控件,而QScrollBar提供了另一种思路:这个控件提供水平的或垂直的滚动条,这样可以扩大当前窗口的有效装载面积,从而装载更多的控件QScrollBar类中常用的信号信号含义valueChanged当滑动条的值改变发射此信号sliderMoved当用户拖动滑块时发射此信号QScrollB...

weixin_39626369的博客 666

PyQt6 QScrollBar滚动条控件

PyQt6提供了两个滚动条控件,分别是水平滚动条HorizontalScrollBar垂直滚动条VerticalScrollBar,但这两个滚动条控件对应的类都是QScrollBar类,这两个控件通过水平的或垂直的滚动条,可以扩大当前窗口的有效装载面积,从而装载更多的控件。滚动条控件通常其他控件配合使用,如ScrollArea、TableWidget表格等,另外,也可以使用滚动条控件实现滑块控件同样的功能,实际上,滚动条控件也是一种特殊的滑块控件。

java1234的博客 718

qt -- QScrollBar滚动条

1、QScrollBar QScrollBar提供了垂直或水平滚动条滚动条通常配有其他控件,使导航更加精确。 信号: valueChanged() -- 当滚动条的值已经发生改变时,被发射。tracking()决定在用户操作期间,这个信号是否被发射。 sliderPressed() -- 当用户开始拖动滑块时,被发射。 sliderMoved() -- 当用户拖动滑块时,被发射。 sliderReleased() -- 当用户释放滑块时,被发射。 nextLine() --当滚动条已经向.

ccr的博客 6623

qtQScrollBar信号触发

事情的起因是这样的,因为软件上有多份表格,都需要自定义样式的拖动条。索性我就创建一个类,继承QScrollBar,然后设置这个类的样式,这样当我需要使用的时候,直接使用这个类就行。但是这个也存在风险。比如我设置QScrollBar是这样的当我需要获取到拖动条的值是否改变,也就是拖动的时候。我是这样写的这个信号,本身是没有什么问题的。但是当我打印值的时候,一直显示,我纳闷了,这啥情况,起初以为是是没有加入qobject宏的问题,但是后面调查没有问题。

家俊的博客 828

【2.PyQt5 GUI 常用界面组件】3.QSliderQProgressBar组件

3.QSliderQProgressBar组件 滑动输入组件 QSlider QScrollBar 进度条显示组件 QProgressBar QSliderQScrollBar组件都是从QAbstractSlider类继承而来的、其属性如下: 属性 描述 minimum 最小值 maximum 最大值 singleStep 单步长 pageStep 按键PgUpPgDn时的步长 val

chenhaiy的博客 676

QT信号机制介绍

 QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗口部件集,具有面向对象、易于扩展、真正的组件编程等特点,更为引人注目的是目前Linux上最为流行的KDE桌面环境就是建立在QT库的基础之上。QT支持下列平台:MS/WINDOWS-95、98、NT2000;UNIX/X11-Linux、Sun Solaris、HP-UX、Digital Unix、IBM AIX、SGI IRIX;EMB

Steven.Leong的专栏 1444

QT输入窗口之QScrollBar滚动条

QT滚动条

odsdadada的博客 8180
上一篇: Python处理envi导出的光谱曲线txt文件写入excel
下一篇: Pillow学习笔记
Hexk_
博客等级 码龄8年 11粉丝 29原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值