PyQt5重写QComboBox的鼠标点击事件方法


Posted in Python onJune 25, 2019

最近学PyQt5,想要做一个串口调试助手来练练手,之前用了正点原子的串口上位机,觉得点击ComboBox自动检测串口这个功能很棒,之前用QT5写串口调试助手的时候也想加入这个功能,但是一直没有成功,之后就不了了之,现在用了PyQt之后就想着一定要实现这个功能,百度了之后看了很多资料都没有找到直接的解决方法,但是大家都是在强调重写鼠标点击事件,然后自己慢慢实验终于写出来了。

我的开发环境是PyCharm+Python3.6+PyQt5.9.2

1、建立工程创建界面什么的我就不写了,百度一大堆,重点就在重写QComboBox中的showPopup函数,我生成的界面文件为MainWidget.py。

2、我一直想最大化QTDesigner的作用,我看到有一位网友是重写了再进行布局,我觉得这样很麻烦,所以我的做法是把布局都做好了,再转换成py文件之后,修改里面的代码,布局就不放出来,很渣,直接看代码。

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QComboBox
from PyQt5.QtCore import pyqtSignal  #导入这个模块才可以创建信号

class MyComboBox(QComboBox):
  popupAboutToBeShown = pyqtSignal()   #创建一个信号
  # def mousePressEvent(self, QMouseEvent):#这个是重写鼠标点击事件
  #   self.popupAboutToBeShown.emit()
  def showPopup(self):          #重写showPopup函数
    self.popupAboutToBeShown.emit()   #发送信号

这样重写就完成了,我之前想的是重写鼠标点击事件,也就是上面代码中重写鼠标点击事件,但是经过实验,重写这个函数之后下拉列表就弹不出来了,后来研究了一下,在QComboBox中应该是鼠标点击事件触发了下拉函数showPopup,所以改为重写showPopup。

通过查看QT帮助文档可以看到

virtual void showPopup()

virtual关键字用于修改方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。

3、接下来就是修改建立界面的代码,只需要修改一行,原代码如下

self.ComBox = QtWidgets.QComboBox(self.splitter)

原代码是调用QComboBox类,也就是showPopup函数没有修改过,将其改为

self.ComBox = MyComboBox(self.splitter)

这是调用了重写后的类,其他的QComboBox控件不做修改,其功能就还是正常的。

最后绑定信号与槽

self.ComBox.popupAboutToBeShown.connect(Form.refresh)

refresh槽函数在新建的py文件中定义

以上这篇PyQt5重写QComboBox的鼠标点击事件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python脚本实现统计日志文件中的ip访问次数代码分享
Aug 06 Python
python使用Berkeley DB数据库实例
Sep 26 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
pip安装时ReadTimeoutError的解决方法
Jun 12 Python
详解Python下ftp上传文件linux服务器
Jun 21 Python
获取django框架orm query执行的sql语句实现方法分析
Jun 20 Python
python实现坦克大战
Apr 24 Python
Python模块常用四种安装方式
Oct 20 Python
如何设置PyCharm中的Python代码模版(推荐)
Nov 20 Python
Python实现简单猜数字游戏
Feb 03 Python
2021年pycharm的最新安装教程及基本使用图文详解
Apr 03 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 #Python
PyQt5下拉式复选框QComboCheckBox的实例
Jun 25 #Python
在Pandas中处理NaN值的方法
Jun 25 #Python
python实现websocket的客户端压力测试
Jun 25 #Python
python中metaclass原理与用法详解
Jun 25 #Python
python实现接口并发测试脚本
Jun 25 #Python
Python实现EXCEL表格的排序功能示例
Jun 25 #Python
You might like
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
2016/01/09 PHP
php进程间通讯实例分析
2016/07/11 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
javascript语句中的CDATA标签的意义
2007/05/09 Javascript
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
2017/03/09 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
微信开发之企业付款到银行卡接口开发的示例代码
2018/09/18 Javascript
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
python重试装饰器示例
2014/02/11 Python
Python 数据结构之队列的实现
2017/01/22 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
Python Matplotlib库安装与基本作图示例
2019/01/09 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
Django自带日志 settings.py文件配置方法
2019/08/30 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
企业厂务公开实施方案
2014/03/26 职场文书
求职个人评价范文
2014/04/09 职场文书
大学生励志演讲稿
2014/04/25 职场文书
2014年师德承诺书
2014/05/23 职场文书
公司员工违纪检讨书
2015/05/05 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
2016年中秋祝酒词
2015/11/26 职场文书
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫