QRadioButton 如何添加一个选择检查?
QRadioButton how add a selection check?
在 selection check false 上,我尝试阻止该单选按钮的 selection。但无论如何,它确实得到 selected,即使使用单发计时器也是如此:
class MyQWidget(QWidget):
def __init__(self):
QWidget.__init__(self)
...
self.ui.buttonGroup.buttonPressed.connect(self.is_init)
def is_init(self, button):
if True: #some check here to prevent selection of it
print('no select')
QTimer.singleShot(0, lambda: button.setChecked(False))
编辑:
假设一个按钮组,如果自定义测试为假(if True: #some check
),我会尝试拦截新闻电话(未点击)而不是 select 那个单选按钮,但我无法阻止按钮 selected 我也将其设置为 False
,如果不满足条件,如何中止 clicked/pressed 单选按钮的 selection?
问题是由于:
A QButtonGroup
is by default exclusive
which implies that a button will always be selected causing the setChecked(False)
不起作用,因为这意味着没有按下任何按钮,因此需要在更改中启用和禁用 属性。
状态的改变不是在按下时发生,而是在释放时发生,所以必须使用buttonReleased
信号。
考虑到下一部分中的前一个,我展示了一个 MWE:
from PySide2 import QtCore, QtWidgets
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.buttonGroup = QtWidgets.QButtonGroup(self)
self.buttonGroup.buttonReleased.connect(self.on_buttonReleased)
lay = QtWidgets.QHBoxLayout(self)
for i in range(4):
button = QtWidgets.QRadioButton(f"button-{i}")
lay.addWidget(button)
self.buttonGroup.addButton(button)
@QtCore.Slot(QtWidgets.QAbstractButton)
def on_buttonReleased(self, button):
if True:
self.buttonGroup.setExclusive(False)
button.setChecked(False)
self.buttonGroup.setExclusive(True)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.resize(640, 240)
w.show()
sys.exit(app.exec_())
在 selection check false 上,我尝试阻止该单选按钮的 selection。但无论如何,它确实得到 selected,即使使用单发计时器也是如此:
class MyQWidget(QWidget):
def __init__(self):
QWidget.__init__(self)
...
self.ui.buttonGroup.buttonPressed.connect(self.is_init)
def is_init(self, button):
if True: #some check here to prevent selection of it
print('no select')
QTimer.singleShot(0, lambda: button.setChecked(False))
编辑:
假设一个按钮组,如果自定义测试为假(if True: #some check
),我会尝试拦截新闻电话(未点击)而不是 select 那个单选按钮,但我无法阻止按钮 selected 我也将其设置为 False
,如果不满足条件,如何中止 clicked/pressed 单选按钮的 selection?
问题是由于:
A
QButtonGroup
is by defaultexclusive
which implies that a button will always be selected causing thesetChecked(False)
不起作用,因为这意味着没有按下任何按钮,因此需要在更改中启用和禁用 属性。状态的改变不是在按下时发生,而是在释放时发生,所以必须使用
buttonReleased
信号。
考虑到下一部分中的前一个,我展示了一个 MWE:
from PySide2 import QtCore, QtWidgets
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.buttonGroup = QtWidgets.QButtonGroup(self)
self.buttonGroup.buttonReleased.connect(self.on_buttonReleased)
lay = QtWidgets.QHBoxLayout(self)
for i in range(4):
button = QtWidgets.QRadioButton(f"button-{i}")
lay.addWidget(button)
self.buttonGroup.addButton(button)
@QtCore.Slot(QtWidgets.QAbstractButton)
def on_buttonReleased(self, button):
if True:
self.buttonGroup.setExclusive(False)
button.setChecked(False)
self.buttonGroup.setExclusive(True)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.resize(640, 240)
w.show()
sys.exit(app.exec_())