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实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
Python分析学校四六级过关情况
Nov 22 Python
利用python编写一个图片主色转换的脚本
Dec 07 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
python实现数据写入excel表格
Mar 25 Python
python re库的正则表达式入门学习教程
Mar 08 Python
浅谈Python基础—判断和循环
Mar 22 Python
详解Python下载图片并保存本地的两种方式
May 15 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
Oct 27 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
Apr 17 Python
python如何调用百度识图api
Sep 29 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 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编程之高级技巧——利用Mysql函数
2006/10/09 PHP
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
PHP 获取MySQL数据库里所有表的实现代码
2011/07/13 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
php 算法之实现相对路径的实例
2017/10/17 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
vue中倒计时组件的实例代码
2018/07/06 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
微信小程序实现滑动操作代码
2020/04/23 Javascript
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
python使用wmi模块获取windows下的系统信息 监控系统
2015/10/27 Python
python之Socket网络编程详解
2016/09/29 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
如何在python中实现线性回归
2020/08/10 Python
django有哪些好处和优点
2020/09/01 Python
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
使用C#编写创建一个线程的代码
2013/01/22 面试题
医学生毕业自我鉴定
2014/03/26 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
开学典礼致辞
2015/07/29 职场文书
html实现弹窗的实例
2021/06/09 HTML / CSS
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电