PyQt实现QSlider滑块鼠标点击事件

这篇具有很好参考价值的文章主要介绍了PyQt实现QSlider滑块鼠标点击事件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在PyQt添加SQlider滑动条后,发现鼠标点击时滑块只能按照设定步数一步步移动,不能点哪里滑块到哪里。网上查找资料后发现这方面相关参考资料比较少,且大多数文章表述对我个人来说比较难理解,最后综合参考几篇较好的文章后才实现功能,在这里记录一下具体实现方法。

目录
一. 设计UI界面
二. 将.ui文件转为.py文件
三. 重写QSlider的鼠标点击事件
四. 添加窗口运行查看效果
**

一. 设计UI界面

为了方便直观设计界面,UI设计在Qt Designer中完成。
首先,在Qt Designer中创建一个Widget窗体,如下图。PyQt实现QSlider滑块鼠标点击事件

然后,将界面左侧水平滑动条直接拖到窗体中,添加两个,名称分别为horizontalSlider和horizontalSlider_2,点击保存。PyQt实现QSlider滑块鼠标点击事件

二. 将.ui文件转为.py文件

在PyCharm中,通过PyUic工具将刚刚保存的slider_test.ui文件转化为.py文件,具体过程请参考相关教程。
转化成功后会有一个slider_test.py文件。
PyQt实现QSlider滑块鼠标点击事件

三. 重写QSlider的鼠标点击事件

双击打开slider_test.py文件(也可不在Qt Designer中设计,直接创建.py文件复制程序)。

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(487, 402)
        self.horizontalSlider = QtWidgets.QSlider(Form)
        self.horizontalSlider.setGeometry(QtCore.QRect(60, 140, 361, 31))
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setObjectName("horizontalSlider")
        self.horizontalSlider_2 = QtWidgets.QSlider(Form)
        self.horizontalSlider_2.setGeometry(QtCore.QRect(60, 230, 361, 31))
        self.horizontalSlider_2.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_2.setObjectName("horizontalSlider_2")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))

然后,创建MySlider类,继承自QSlider,在类中重写鼠标点击事件mousePressEvent。将slider_test.py代码中的horizontalSlider_2滑动条改为自己创建的MySlider类,horizontalSlider滑动条不做修改。具体代码:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QSlider


class MySlider(QSlider):  # 继承QSlider
    customSliderClicked = pyqtSignal(str)  # 创建信号

    def __init__(self, parent=None):
        super(QSlider, self).__init__(parent)

    def mousePressEvent(self, QMouseEvent):  # 重写的鼠标点击事件
        super().mousePressEvent(QMouseEvent)
        pos = QMouseEvent.pos().x() / self.width()
        self.setValue(round(pos * (self.maximum() - self.minimum()) + self.minimum()))  # 设定滑动条滑块位置为鼠标点击处
        self.customSliderClicked.emit("mouse Press")  # 发送信号


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(487, 402)
        self.horizontalSlider = QtWidgets.QSlider(Form)  # 滑动条1
        self.horizontalSlider.setGeometry(QtCore.QRect(60, 140, 361, 31))
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setObjectName("horizontalSlider")
        self.horizontalSlider_2 = MySlider(Form)  # 滑动条2,修改此处
        self.horizontalSlider_2.setGeometry(QtCore.QRect(60, 230, 361, 31))
        self.horizontalSlider_2.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_2.setObjectName("horizontalSlider_2")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))


四. 添加窗口运行查看效果

创建一个slider.py文件,代码如下:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from slider_test import Ui_Form


class MainWindow(Ui_Form, QMainWindow):  # 创建窗口
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.horizontalSlider.valueChanged.connect(self.horizontalSlider_change)  # 滑动条1数值变化时触发horizontalSlider_change
        self.horizontalSlider_2.customSliderClicked.connect(
            self.horizontalSlider_2_change)  # 鼠标点击滑动条2,接收mousePressEvent发送的信号后触发horizontalSlider_2_change2

    def horizontalSlider_change(self):
        print('滑动条1发生变化')

    def horizontalSlider_2_change(self):  # 触发事件写在该函数中
        print('滑动条2发生变化')


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

运行slider.py文件,出现界面后,上面的滑动条1在点击时只能一步一步移动,而下面的滑动条2可以鼠标点哪滑块到哪里。最终效果如下:
PyQt实现QSlider滑块鼠标点击事件
参考文章2中有直接在Python中实现滑块点哪到哪功能参考程序。
初次发表,如有错误请指正,谢谢。

参考文章
1.PyQt5 — 进度条拖动点击视频播放
2.Moving QSlider to Mouse Click Position文章来源地址https://www.toymoban.com/news/detail-486951.html

到了这里,关于PyQt实现QSlider滑块鼠标点击事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • css - 如何禁用 <a> 标签点击,让 <a> 标签实现 disabled 禁用效果(鼠标无法触发点击事件)

    我们知道a标签是没有disabled属性的,那么我们该如何实现a标签按钮的禁用呢? 给a标签设置 “禁用” 属性,如下代码所示: 这样 @click 点击事件就不会触发了。 使用 jquery:removerAttr() 或者 JS:removeAttribute() 移除 a 标签的 href 属性。 使用 jquery:unbind() 或者 JS:removeEventListe

    2024年01月16日
    浏览(65)
  • vue+openlayers,初始化openlayers地图,实现鼠标移入、点击、右键等事件

    主要功能:初始化openlayers地图,实现鼠标移入、点击、右键等事件,以及获取当前图标的feature,将当前图标信息以弹框方式进行展示;地图上展示拾取到的经纬度 前端使用的是vue技术栈 步骤一:将地图的公用配置项单独提出成一个js文件,方便打包后进行修改,代码如下

    2024年02月11日
    浏览(41)
  • QT基础:QSlider 滑块的简单演示

    QSlider 是一个滑块组件,常用于播放视频的状态栏,显示视频播放的进度; 它的样式当然也是可以改变的,关于它的详细介绍可以参考:Qt 之 QSlider 这里主要演示以下常用信号: 滑块共有两种,一种是水平的,一种是垂直的,它们的区别只是放置的方向不同而已 这里主要演

    2024年02月15日
    浏览(43)
  • 【PyQt】(自制类)处理鼠标点击逻辑

    写了个自认为还算不错的类,用于简化 mousePressEvent 、 mouseMoveEvent 和 mouseReleaseEvent 中的鼠标信息。 功能有以下几点: 鼠标当前状态 ,包括鼠标左/中/右键和单击/双击/抬起 鼠标防抖 (仅超出一定程度时才判断鼠标发生了移动),灵敏度可设置; 鼠标长按 (在鼠标长按并且未发

    2024年02月02日
    浏览(43)
  • 【QT数字图像处理】(三)QSlider滑块学习

    实验二的要求是编程实现RGB彩色空间到HSV彩色空间的转换,并通过调整H、S、V实现图像色度、色饱和度和亮度的调节。在开始实验二之前,我们先来学习一下关于QSlider滑块的操作。 最后要实现的效果如下:用3个滑动条分别来调节RGB三个颜色分量的大小,并显示到左侧各自的

    2024年02月13日
    浏览(31)
  • 如何实现让最上面的图层不影响下面图层的点击事件(可穿透图层的鼠标事件)

    咱先来解决问题然后再了解是怎摸个原理在了解他的兼容性 pointer-events  直译为 指针事件 ,该属性指定在什么情况下某个DOM可以成为鼠标事件的 target。 简而言之,就是允许/禁止DOM的 鼠标事件 (click事件、hover事件、mouse事件等鼠标事件) 他当然不止一个属性值还有其他的某些

    2024年02月10日
    浏览(45)
  • echarts地图,选中颜色设置;取消鼠标默认事件,点击选中地图实现颜色变化,选择高亮,选中高亮,取消选中(再次点击取消选中),以下面地图为例

    echarts地图,选中颜色设置;取消鼠标默认事件,点击选中地图实现颜色变化,选择高亮,选中高亮,取消选中(再次点击取消选中),下面以四川部分地图为例 针对选择模式,非点击(click),选择事件,可以获取相关地图数据,使用echarts地图的事件方法 mapselectchanged

    2024年02月11日
    浏览(49)
  • Qt鼠标点击事件处理:显示鼠标点击位置(完整示例)

    Qt 入门实战教程(目录) 前驱文章: Qt Creator 创建 Qt 默认窗口程序(推荐) 事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。 例如点击鼠标,按下按键。 在Qt中使用一个对象来表示一个事件,它继承自QEvent类。 如鼠标事件(例如点击

    2024年02月10日
    浏览(56)
  • [pyqt5]触发ctrl+鼠标滚轮事件

    有时候我们需要按住Ctrl+鼠标滚轮实现图像放大或者缩小,因此需要这个事件,具体看代码

    2024年02月13日
    浏览(49)
  • vue+echarts 实现地图tooltip点击事件;toolTip数据动态渲染;同时鼠标滑过涟漪点时实现地图多区域联动

    最终做出来的效果是这样的: 最近做项目时,遇到这样的需求:         1、toolTip上的数据根据后台动态渲染         2、鼠标移入地图涟漪点时显示tootTip,点击toolTip上的文字,携带动态数据id进行路由跳转         3、鼠标移入地图涟漪点,与涟漪点相关的省份多区域联动

    2024年02月09日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包