pyqt5:重写QComboBox控件
需求:pyqt5中的QComboBox类在单击组合框时不像一般Button类,可以发出clicked()信号,为了实现类似功能,需要重写QComboBox控件和其中的QMousePressEvent事件,并且需要自定信号。
实现:
新建一个.py文件,名为MyComboBox.py,代码如下:
from PyQt5 import QtGui
from PyQt5.Qt import *
from PyQt5.QtCore import *
class MyComboBoxControl(QComboBox):
clicked = pyqtSignal() # 自定义信号
def __init__(self, Parent=None):
super(MyComboBoxControl, self).__init__(Parent) # 调用父类的初始化方法
def mousePressEvent(self, event: QtGui.QMouseEvent) -> None: # 重写鼠标按下事件
if event.button() == Qt.LeftButton: # 当鼠标左键单击时
self.clicked.emit() # 发射信号
QComboBox.showPopup(self) # 弹出下拉框
然后在主处理文件中,将信号与槽函数连接起来:
def EventTrigger(self):
self.comboBox_3.clicked.connect(self.EnumPrinterName) # 连接左键单击时的处理函数
最后,在使用QtDesigner生成的UI文件中,将原始的QComboBox类替换成重写的MyComboBox类:
改之前:
self.comboBox_3 = QComboBox(self.groupBox_4)
改之后:
self.comboBox_3 = MyComboBoxControl(self.groupBox_4)