PyQt5重寫QComboBox的鼠標(biāo)點(diǎn)擊事件方法
最近學(xué)PyQt5,想要做一個(gè)串口調(diào)試助手來(lái)練練手,之前用了正點(diǎn)原子的串口上位機(jī),覺得點(diǎn)擊ComboBox自動(dòng)檢測(cè)串口這個(gè)功能很棒,之前用QT5寫串口調(diào)試助手的時(shí)候也想加入這個(gè)功能,但是一直沒有成功,之后就不了了之,現(xiàn)在用了PyQt之后就想著一定要實(shí)現(xiàn)這個(gè)功能,百度了之后看了很多資料都沒有找到直接的解決方法,但是大家都是在強(qiáng)調(diào)重寫鼠標(biāo)點(diǎn)擊事件,然后自己慢慢實(shí)驗(yàn)終于寫出來(lái)了。
我的開發(fā)環(huán)境是PyCharm+Python3.6+PyQt5.9.2
1、建立工程創(chuàng)建界面什么的我就不寫了,百度一大堆,重點(diǎn)就在重寫QComboBox中的showPopup函數(shù),我生成的界面文件為MainWidget.py。
2、我一直想最大化QTDesigner的作用,我看到有一位網(wǎng)友是重寫了再進(jìn)行布局,我覺得這樣很麻煩,所以我的做法是把布局都做好了,再轉(zhuǎn)換成py文件之后,修改里面的代碼,布局就不放出來(lái),很渣,直接看代碼。
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import QComboBox from PyQt5.QtCore import pyqtSignal #導(dǎo)入這個(gè)模塊才可以創(chuàng)建信號(hào) class MyComboBox(QComboBox): popupAboutToBeShown = pyqtSignal() #創(chuàng)建一個(gè)信號(hào) # def mousePressEvent(self, QMouseEvent):#這個(gè)是重寫鼠標(biāo)點(diǎn)擊事件 # self.popupAboutToBeShown.emit() def showPopup(self): #重寫showPopup函數(shù) self.popupAboutToBeShown.emit() #發(fā)送信號(hào)
這樣重寫就完成了,我之前想的是重寫鼠標(biāo)點(diǎn)擊事件,也就是上面代碼中重寫鼠標(biāo)點(diǎn)擊事件,但是經(jīng)過(guò)實(shí)驗(yàn),重寫這個(gè)函數(shù)之后下拉列表就彈不出來(lái)了,后來(lái)研究了一下,在QComboBox中應(yīng)該是鼠標(biāo)點(diǎn)擊事件觸發(fā)了下拉函數(shù)showPopup,所以改為重寫showPopup。
通過(guò)查看QT幫助文檔可以看到
virtual void showPopup()
virtual關(guān)鍵字用于修改方法、屬性、索引器或事件聲明,并使它們可以在派生類中被重寫。
3、接下來(lái)就是修改建立界面的代碼,只需要修改一行,原代碼如下
self.ComBox = QtWidgets.QComboBox(self.splitter)
原代碼是調(diào)用QComboBox類,也就是showPopup函數(shù)沒有修改過(guò),將其改為
self.ComBox = MyComboBox(self.splitter)
這是調(diào)用了重寫后的類,其他的QComboBox控件不做修改,其功能就還是正常的。
最后綁定信號(hào)與槽
self.ComBox.popupAboutToBeShown.connect(Form.refresh)
refresh槽函數(shù)在新建的py文件中定義
以上這篇PyQt5重寫QComboBox的鼠標(biāo)點(diǎn)擊事件方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
《Python之禪》中對(duì)于Python編程過(guò)程中的一些建議
這篇文章主要介紹了《Python之禪》中對(duì)于Python編程過(guò)程中的一些建議,需要的朋友可以參考下2015-04-04PyQt4實(shí)現(xiàn)下拉菜單可供選擇并打印出來(lái)
這篇文章主要為大家詳細(xì)介紹了PyQt4實(shí)現(xiàn)下拉菜單可供選擇并打印出來(lái),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04Python網(wǎng)絡(luò)編程之HTTP客戶端模塊urllib與urllib3
這篇文章介紹了Python網(wǎng)絡(luò)編程之HTTP客戶端模塊urllib與urllib3,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05python smtplib模塊自動(dòng)收發(fā)郵件功能(二)
這篇文章主要為大家詳細(xì)介紹了python smtplib模塊自動(dòng)收發(fā)郵件功能的第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05