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 相关文章推荐
Flask入门教程实例:搭建一个静态博客
Mar 27 Python
12步入门Python中的decorator装饰器使用方法
Jun 20 Python
python 函数传参之传值还是传引用的分析
Sep 07 Python
Python3 操作符重载方法示例
Nov 23 Python
简单谈谈python基本数据类型
Sep 26 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
深入了解Python iter() 方法的用法
Jul 11 Python
Python OrderedDict的使用案例解析
Oct 25 Python
Python之指数与E记法的区别详解
Nov 21 Python
Python类反射机制使用实例解析
Dec 30 Python
将python字符串转化成长表达式的函数eval实例
May 11 Python
Pyqt5将多个类组合在一个界面显示的完整示例
Sep 04 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
漂亮但不安全的CTB
2006/10/09 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/20 Javascript
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
js格式化时间的方法
2015/12/18 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
总结JavaScript三种数据存储方式之间的区别
2016/05/03 Javascript
jquery插件bootstrapValidator表单验证详解
2016/12/15 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
从零学习node.js之模块规范(一)
2017/02/21 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
python登录QQ邮箱发信的实现代码
2013/02/10 Python
详解django中自定义标签和过滤器
2017/07/03 Python
详解python中asyncio模块
2018/03/03 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
python中random模块详解
2021/03/01 Python
纯CSS3实现带动画效果导航菜单无需js
2013/09/27 HTML / CSS
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
搞笑创意广告语
2014/03/17 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
会计学专业求职信
2014/07/17 职场文书
2014年大班保育员工作总结
2014/12/02 职场文书
个人道歉信大全
2019/04/11 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
浅谈Python魔法方法
2021/06/28 Java/Android