Я использую PySide2 в рамках Maya 2018, если это важно. QRadioButton будет реагировать, только если щелкнуть в области текста, даже если прямоугольник кнопки больше. QPushButton можно щелкнуть в любом месте его прямоугольника, и он ответит. Могу ли я заставить QRadioButton действовать как QPushButton в этом отношении?
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_())
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.