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的鼠标点击事件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • PyQt QCombobox设置行高的方法

    之前在网上查找了很多相关资料,有说设置icon高度来支持item的,有说要添加自己写指定高度的view来填充的,但是对于一个只有文字的Qcombobox来说,这些无疑是太过繁琐了.研究了很久才发现有个很简单的方法. 先在QSS样式表中添加如下内容:(高度自定,也可以设置宽度) QComboBox QAbstractItemView::item { min-height: 30px; } 然后在代码中添加如下代码: self.ui_combobox.setView(QListView()) 好了,

  • pyqt5的QComboBox 使用模板的具体方法

    QComboBox 的常规使用方法,在这个使用模板里,基本都有了. QComboBox小部件是一个组合的按钮和弹出列表. QComboBox提供了一种向用户呈现选项列表的方式,其占用最小量的屏幕空间. 组合框是一个显示当前项目的选择小部件,可以弹出可选项目列表.组合框可以是可编辑的,允许用户修改列表中的每个项目. 组合框可以包含图像以及字符串: 当然insertItem()和setItemText()函数需要适当重载.对于可编辑组合框,提供了函数clearEditText(),以清除显示的字符串

  • PyQt5重写QComboBox的鼠标点击事件方法

    最近学PyQt5,想要做一个串口调试助手来练练手,之前用了正点原子的串口上位机,觉得点击ComboBox自动检测串口这个功能很棒,之前用QT5写串口调试助手的时候也想加入这个功能,但是一直没有成功,之后就不了了之,现在用了PyQt之后就想着一定要实现这个功能,百度了之后看了很多资料都没有找到直接的解决方法,但是大家都是在强调重写鼠标点击事件,然后自己慢慢实验终于写出来了. 我的开发环境是PyCharm+Python3.6+PyQt5.9.2 1.建立工程创建界面什么的我就不写了,百度一大堆,重点

  • wx.CheckBox创建复选框控件并响应鼠标点击事件

    本文实例为大家分享了wx.CheckBox创建复选框控件并响应鼠标点击事件的具体代码,供大家参考,具体内容如下 执行效果图: 执行代码: #!/usr/bin/env python # -*-encoding:utf-8 -*- 'Crteate CheckBox Example' import wx class MyFrame(wx.Frame): #子类化框架对像 def __init__(self,parent,id): #定义子类构造器 wx.Frame.__init__(self,pa

  • Python实现windows下模拟按键和鼠标点击的方法

    本文实例讲述了Python实现windows下模拟按键和鼠标点击的方法.分享给大家供大家参考.具体如下: 这段代码可以模拟在窗口上按下按键.鼠标左键点击.鼠标右键点击.鼠标双击等等 # # _*_ coding:UTF-8 _*_ import win32api import win32con import win32gui from ctypes import * import time VK_CODE = { 'backspace':0x08, 'tab':0x09, 'clear':0x0

  • 在Vue组件中获取全局的点击事件方法

    使用场景: 在Vue组件中点击某元素之外的地方移除该元素 需求: 如上图所示,"用户列表"页面有三个Vue组件组成,分别是"菜单组件","导航组件"和"列表组件".其中"列表组件"中包含一个"下拉菜单",当我们点击"下拉菜单"以外的区域隐藏下拉菜单. 解决方法一: 出现"下拉菜单"的同时,建一个透明的遮罩层,然后只有"下拉菜单"

  • vue.js中关于点击事件方法的使用(click)

    目录 关于点击事件方法的使用(click) vue点击click事件解析 关于点击事件方法的使用(click) 定义vue.js: <script src="../js/vue.min.js"> </script> 也可以使用网上的: <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script> 都可以. 定义方法: let vm=new

  • 使用pyqt5 实现ComboBox的鼠标点击触发事件

    一.自定义MyComboBox # MyComboBox.py from PyQt5.QtWidgets import QComboBox from PyQt5.QtCore import pyqtSignal class MyComboBox(QComboBox): clicked = pyqtSignal() #创建一个信号 def showPopup(self): #重写showPopup函数 self.clicked.emit() #发送信号 super(MyComboBox, self

  • js 鼠标点击事件及其它捕获

    <div><a href="#" onclick="showPricediv('aaa')" abc=1>adsfsdf</a></div> <div id="aaa" style="display:none" onmouseover="temshowTag=true" onmouseout="temshowTag=false">

  • 易语言模拟鼠标点击实现方法

    易语言对于初学者而言是一种非常好学的中文编程语言,能够快速地实现很多功能,全汉语编程,简单易上手,易语言功能强大实用,系统全部自行设计开发,且易语言自带的即时帮助系统,非常方便. 这里,教大家如何实现模拟鼠标点击. 1.进入易语言界面,在右边的工具栏中,分别找到"编辑框""标签""按钮"三个控件. 2.在主编辑界面中,如图所示摆放位置,进行初步界面搭建. 3.在左侧的属性栏中找到"标题"属性,分别给标签设置为"X&q

  • 元素绑定click点击事件方法

    最简单的莫过于使用click方法: <input id="btn" type="button" value="BUTTON" onclick="alert(1)"/> <script> var btn = document.getElementById('btn'); btn.click(); </script> 所有浏览器都弹出了1.但是如果把input换成div呢? <div id

  • Android中捕获TTextView文本中的链接点击事件方法

    Android中的TTextView很强大,我们可以不仅可以设置纯文本为其内容,还可以设置包含网址和电子邮件地址的内容,并且使得这些点击可以点击.但是我们可以捕获并控制这些链接的点击事件么,当然是可以的. 本文将一个超级简单的例子介绍一下如何实现在Android TextView 捕获链接的点击事件. 关键实现 实现原理就是将所有的URL设置成ClickSpan,然后在它的onClick事件中加入你想要的控制逻辑就可以了. 复制代码 代码如下: private void setLinkClick

随机推荐