Я использую PySide2 в рамках Maya 2018, если это важно. QRadioButton будет реагировать, только если щелкнуть в области текста, даже если прямоугольник кнопки больше. QPushButton можно щелкнуть в любом месте его прямоугольника, и он ответит. Могу ли я заставить QRadioButton действовать как QPushButton в этом отношении?

2
smeet 13 Июн 2020 в 01:55

1 ответ

Лучший ответ

Каждая кнопка, унаследованная от QAbstractButton, например QPushButton и QRadioButton, должна реализовывать hitButton(), который указывает, меняет ли позиция состояние кнопки. Таким образом, в случае QPushButton он принимает всю свою геометрию в качестве ссылки, вместо этого QRadioButton принимает в качестве ссылки текст + радиус. Решение состоит в том, чтобы переопределить этот метод, чтобы он имел желаемое поведение:

import os
import sys

from PySide2 import QtCore, QtWidgets


class CustomRadioButton(QtWidgets.QRadioButton):
    def hitButton(self, pos):
        return self.rect().contains(pos)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)

    w = QtWidgets.QWidget()
    lay = QtWidgets.QVBoxLayout(w)
    for i in range(4):
        btn = QtWidgets.QRadioButton(f"QRadioButton-{i}")
        lay.addWidget(btn)
    for j in range(4):
        btn = CustomRadioButton(f"CustomRadioButton-{i}")
        lay.addWidget(btn)

    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())
1
eyllanesc 12 Июн 2020 в 23:15