如何使 QRadioButton 可点击区域成为整个按钮而不是仅在文本上

How to make QRadioButton clickable area the whole button instead of just on the text

如果重要的话,我正在使用 Maya 2018 中的 PySide2。 QRadioButton 只有在文本区域中单击时才会响应,即使按钮的矩形更大也是如此。 QPushButton 可以在其矩形中的任何位置单击,它会响应。我能否让 QRadioButton 在这方面像 QPushButton 一样工作?

每个继承自 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_())