用户单击 QComboBox 上的向下箭头的信号是什么?

What is the signal for user clicks the down arrow on the QComboBox?

我需要在用户单击组合框上的向下箭头时执行一个方法。我已经尝试了文档中列出的信号,但 none 有效。

from PyQt5.QtWidgets import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.combo = QComboBox(self)
        self.combo.signal.connect(self.mymethod)
        self.show()

    def mymethod(self):
        print('hello world')

app = QApplication(sys.argv)
win = Window()
sys.exit(app.exec_())

按下向下箭头时没有发出信号,但您可以创建覆盖 mousePressEvent 方法并验证是否按下了此元素:

import sys

from PyQt5.QtCore import pyqtSignal, Qt
from PyQt5.QtWidgets import (
    QApplication,
    QComboBox,
    QStyle,
    QStyleOptionComboBox,
    QVBoxLayout,
    QWidget,
)


class ComboBox(QComboBox):
    arrowClicked = pyqtSignal()

    def mousePressEvent(self, event):
        super().mousePressEvent(event)
        opt = QStyleOptionComboBox()
        self.initStyleOption(opt)
        sc = self.style().hitTestComplexControl(
            QStyle.CC_ComboBox, opt, event.pos(), self
        )
        if sc == QStyle.SC_ComboBoxArrow:
            self.arrowClicked.emit()


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.combo = ComboBox()
        self.combo.arrowClicked.connect(self.mymethod)

        lay = QVBoxLayout(self)
        lay.addWidget(self.combo)
        lay.setAlignment(Qt.AlignTop)

    def mymethod(self):
        print("hello world")


if __name__ == "__main__":

    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())