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文件中定義

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章