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 MySQLdb Windows下安装教程及问题解决方法
May 09 Python
Python 多线程Threading初学教程
Aug 22 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
浅述python中深浅拷贝原理
Sep 18 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
pytorch permute维度转换方法
Dec 14 Python
Python循环结构的应用场景详解
Jul 11 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
Jun 02 Python
matplotlib图例legend语法及设置的方法
Jul 28 Python
python - timeit 时间模块
Apr 06 Python
python实现图片批量压缩
Apr 24 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中计算时间差的几种方法
2009/12/31 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
JS实现拖动示例代码
2013/11/01 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
2016/03/31 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
bootstrap输入框组代码分享
2016/06/07 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
2019/09/06 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
python搭建简易服务器分析与实现
2012/12/15 Python
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
简化Python的Django框架代码的一些示例
2015/04/20 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
python如何修改文件时间属性
2021/02/05 Python
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
安全生产检讨书
2014/01/21 职场文书
优秀毕业生求职信
2014/06/05 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
趣味运动会简讯
2015/07/20 职场文书