2

問題があれば、Maya 2018 内で PySide2 を使用しています。QRadioButton は、ボタンの四角形が大きくても、テキストの領域でクリックされた場合にのみ応答します。QPushButton は、長方形のどこでもクリックでき、応答します。この点で QRadioButton を QPushButton のように動作させることはできますか?

4

1 に答える 1

1

QPushButton や QRadioButton などの QAbstractButton から継承するすべて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_())
于 2020-06-12T23:15:30.953 に答える