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 相关文章推荐
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
May 17 Python
对python 矩阵转置transpose的实例讲解
Apr 17 Python
Ubuntu下使用python读取doc和docx文档的内容方法
May 08 Python
python递归实现快速排序
Aug 18 Python
python获取时间及时间格式转换问题实例代码详解
Dec 06 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 Python
浅析Python 读取图像文件的性能对比
Mar 07 Python
python安装numpy和pandas的方法步骤
May 27 Python
python3文件复制、延迟文件复制任务的实现方法
Sep 02 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
Python实现加密接口测试方法步骤详解
Jun 05 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
Jun 10 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 读取文件乱码问题
2010/02/20 PHP
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
php数组使用规则分析
2015/02/27 PHP
PHP 验证登陆类分享
2015/03/13 PHP
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
7个JS基础知识总结
2014/03/05 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
jQuery.each使用详解
2015/07/07 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
详解Vue组件之间的数据通信实例
2017/06/17 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
jQuery响应滚动条事件功能示例
2017/10/14 jQuery
vue实现移动端悬浮窗效果
2018/12/01 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
详解python开发环境搭建
2016/12/16 Python
Python实现PS滤镜碎片特效功能示例
2018/01/24 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
【python】matplotlib动态显示详解
2019/04/11 Python
Python实现打印实心和空心菱形
2019/11/23 Python
python爬虫实例之获取动漫截图
2020/05/31 Python
html5教程画矩形代码分享
2013/12/04 HTML / CSS
比利时的在线灯具店:Lampen24.be
2019/07/01 全球购物
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
介绍一下linux的文件权限
2012/02/15 面试题
客服专员岗位职责
2014/02/28 职场文书
《第一朵杏花》教学反思
2014/04/16 职场文书
私人委托书格式
2014/09/10 职场文书
股权投资协议书
2016/03/23 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书