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开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 Python
简单实现python收发邮件功能
Jan 05 Python
Django 内置权限扩展案例详解
Mar 04 Python
python opencv 简单阈值算法的实现
Aug 04 Python
python 求10个数的平均数实例
Dec 16 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
Jun 11 Python
为什么说python更适合树莓派编程
Jul 20 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
Sep 09 Python
python中pop()函数的语法与实例
Dec 01 Python
浅析Django接口版本控制
Jun 26 Python
Python基于百度API识别并提取图片中文字
Jun 27 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内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Django实现支付宝付款和微信支付的示例代码
2018/07/25 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
python之mock模块基本使用方法详解
2019/06/27 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
红领巾心向党演讲稿
2014/09/10 职场文书
2014年电厂工作总结
2014/12/04 职场文书
详解MySQL的半同步
2021/04/22 MySQL
Sql Server之数据类型详解
2022/02/28 SQL Server
微信小程序调用python模型
2022/04/21 Python