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实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
Python二分法搜索算法实例分析
May 11 Python
Python解析树及树的遍历
Feb 03 Python
Python实现的概率分布运算操作示例
Aug 14 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
Nov 21 Python
Python Socket使用实例
Dec 18 Python
python素数筛选法浅析
Mar 19 Python
Python后台管理员管理前台会员信息的讲解
Jan 28 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
Python装饰器的应用场景代码总结
Apr 10 Python
python爬虫 requests-html的使用
Nov 30 Python
python 常用的异步框架汇总整理
Jun 18 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 注册时输入信息验证器的实现详解
2013/07/05 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
php实现简单爬虫的开发
2016/03/28 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
javascript实现全局匹配并替换的方法
2015/04/27 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
redux中间件之redux-thunk的具体使用
2018/04/17 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
vue车牌号校验和银行校验实战
2019/01/23 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
python中Django文件上传方法详解
2020/08/05 Python
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
Bed Bath & Beyond加拿大官网:购买床上用品、浴巾、厨房电器等
2019/10/04 全球购物
党支部书记先进事迹
2014/01/17 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
2014年文秘工作总结
2014/11/25 职场文书
三孔导游词
2015/02/05 职场文书
廉政承诺书范文
2015/04/28 职场文书
比赛主持人开场白
2015/05/29 职场文书
纪检监察立案决定书
2015/06/24 职场文书
Java 数组内置函数toArray详解
2021/06/28 Java/Android