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读文件逐行处理的示例代码分享
Dec 27 Python
python访问类中docstring注释的实现方法
May 04 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
pandas使用apply多列生成一列数据的实例
Nov 28 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
Python中and和or如何使用
May 28 Python
PyQt5实现画布小程序
May 30 Python
python 利用opencv实现图像网络传输
Nov 12 Python
Python+DeOldify实现老照片上色功能
Jun 21 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执行速度全攻略(上)
2006/10/09 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
2017/05/26 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
jquery键盘事件介绍
2011/01/31 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
jQuery解析json数据实例分析
2015/11/24 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
JavaScript“尽快失败”的原则实例详解
2016/10/08 Javascript
vue中使用腾讯云Im的示例
2020/10/23 Javascript
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
Python 随机生成中文验证码的实例代码
2013/03/20 Python
Django实现的自定义访问日志模块示例
2017/06/23 Python
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
浅谈flask源码之请求过程
2018/07/26 Python
Python列表list操作相关知识小结
2020/01/29 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
苏格兰领先的多渠道鞋店:Begg Shoes
2019/10/22 全球购物
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
校园新闻广播稿
2014/01/10 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
党员入党表决心的话
2014/03/11 职场文书
设计顾问服务计划书
2014/05/04 职场文书
合作协议书格式
2014/08/19 职场文书
廉政教育的心得体会
2014/09/01 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
教师节随笔
2015/08/15 职场文书
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang
python​格式化字符串
2022/04/20 Python