Как найти стрелку раскрывающегося списка QComboBox? - PullRequest
1 голос
/ 26 апреля 2020

У меня есть QComboBox, и мне нужно настроить список имен при нажатии на стрелку раскрывающегося списка этого QComboBox. Так есть ли какая-либо функция PySide2, чтобы узнать, нажал ли пользователь эту стрелку раскрывающегося списка, после этого я хотел бы получить индекс выбора пользователя. Если у кого-то есть идеи по этому поводу, либо в PySide2.

1 Ответ

1 голос
/ 26 апреля 2020

Вы должны определить положение щелчка мыши и убедиться, что комплексное управление имеет вид QStyle :: SC_ComboBoxArrow:

import sys
from PySide2 import QtCore, QtGui, QtWidgets


class ComboBox(QtWidgets.QComboBox):
    arrowClicked = QtCore.Signal()

    def mousePressEvent(self, event):
        super().mousePressEvent(event)
        opt = QtWidgets.QStyleOptionComboBox()
        opt.initFrom(self)
        opt.subControls = QtWidgets.QStyle.SC_All
        opt.activeSubControls = QtWidgets.QStyle.SC_None
        opt.editable = self.isEditable()
        cc = self.style().hitTestComplexControl(
            QtWidgets.QStyle.CC_ComboBox, opt, event.pos(), self
        )
        if cc == QtWidgets.QStyle.SC_ComboBoxArrow:
            self.arrowClicked.emit()


def main():
    app = QtWidgets.QApplication(sys.argv)
    w = ComboBox()
    w.addItems(["option1", "option2", "option3"])
    w.show()

    w.arrowClicked.connect(
        lambda: print("index: {}, value: {}".format(w.currentIndex(), w.currentText()))
    )
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()
...