PyQt5重写QComboBox的鼠标点击事件方法
最近学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如何使用带有 for 循环的 Lambda 函数
这篇文章主要介绍了如何在 Python 中使用带有 for 循环的 Lambda 函数,使用 Lambda 函数配合 for 循环可以让代码变得更加简洁,但需要注意的是,Lambda 函数在语法上有一些限制,如果需要更复杂的逻辑,还需要使用普通函数,感兴趣的朋友跟随小编一起学习吧2023-05-05Tensorflow高性能数据优化增强工具Pipeline使用详解
这篇文章主要为大家介绍了Tensorflow高性能数据优化增强工具Pipeline使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-11-11Anaconda+spyder+pycharm的pytorch配置详解(GPU)
这篇文章主要介绍了Anaconda+spyder+pycharm的pytorch配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-10-10
最新评论