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 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
深入浅析ImageMagick命令执行漏洞
Oct 11 Python
Python3 模块、包调用&路径详解
Oct 25 Python
python+pygame简单画板实现代码实例
Dec 13 Python
Python实现使用卷积提取图片轮廓功能示例
May 12 Python
Python访问MongoDB,并且转换成Dataframe的方法
Oct 15 Python
python 顺时针打印矩阵的超简洁代码
Nov 14 Python
python 图像平移和旋转的实例
Jan 10 Python
使用 Python 处理 JSON 格式的数据
Jul 22 Python
python 内置函数汇总详解
Sep 16 Python
python带参数打包exe及调用方式
Dec 21 Python
Python安装使用Scrapy框架
Apr 12 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
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
jquery之Document元素选择器篇
2008/08/14 Javascript
JS中showModalDialog 的使用解析
2013/04/17 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
2019/09/16 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
[03:02]2014DOTA2西雅图邀请赛 让队员自己告诉你DK NAVI备战情况
2014/07/08 DOTA
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
python代码能做成软件吗
2020/07/24 Python
手把手教你配置JupyterLab 环境的实现
2021/02/02 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
办公室驾驶员岗位职责
2013/11/15 职场文书
会计工作心得体会
2014/01/13 职场文书
《放飞蜻蜓》教学反思
2014/04/27 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
新学期红领巾广播稿
2014/10/04 职场文书
小学班主任事迹材料
2014/12/17 职场文书
鲁迅故居导游词
2015/02/05 职场文书
导游词之天津古文化街
2019/11/09 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android