我正在整理一个UI-用户提供一些信息,然后执行代码。我有一些复选框。我想根据其他复选框的状态启用/禁用某些复选框。例如,我的UI有一个复选框,该复选框可让用户指定是否要打印文件,以及一个复选框,让用户指定是否希望以彩色打印文件。如果未选中“打印”复选框,那么我想清除并禁用“颜色”复选框:让某人说如果他们不打印则想用彩色打印是没有任何意义的。
我可以看到如何使用信号/插槽来执行此操作,但是我对Qt还是很陌生,所以我想知道是否有更干净的方法可以执行此操作。看ButtonGroups是我的第一个电话站,但是我看不到有什么办法可以使它工作。
我所拥有的看起来像这样。我想强调-这正是我想要做的-我只是不确定这是最好的方法,而且如果我在几个月后回到代码中,我也不想讨厌自己有了更多的知识。如果内置的功能可以实现我的目标,我将完全不感到惊讶。
self.first_checkbox = QtWidgets.QCheckBox()
self.second_checkbox = QtWidgets.QCheckBox()
self.first_checkbox.stateChanged.connect(self._handleCheckboxStateChanged)
@QtCore.Slot()
def _handleCheckboxStateChange(self):
if self.first_checkbox.isChecked():
self.second_checkbox.setEnabled(True)
else:
self.second_checkbox.setEnabled(False)
self.second_checkbox.setChecked(False)
答案 0 :(得分:0)
您的方法正确,我的答案只是尝试显示其他等效方法:
1。
from PySide2 import QtCore, QtWidgets
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.first_checkbox = QtWidgets.QCheckBox("Print")
self.second_checkbox = QtWidgets.QCheckBox("color")
self.first_checkbox.stateChanged.connect(
lambda state: self.second_checkbox.setDisabled(
state != QtCore.Qt.Checked
)
)
self.first_checkbox.stateChanged.connect(
lambda state: self.second_checkbox.setCheckState(
QtCore.Qt.Unchecked
)
if not state
else None
)
self.second_checkbox.setDisabled(True)
lay = QtWidgets.QVBoxLayout(self)
lay.addWidget(self.first_checkbox)
lay.addWidget(self.second_checkbox)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
2。
from PySide2 import QtCore, QtWidgets
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.first_checkbox = QtWidgets.QCheckBox("Print")
self.second_checkbox = QtWidgets.QCheckBox("color")
self.first_checkbox.stateChanged.connect(
self._handleCheckboxStateChange
)
self.second_checkbox.setDisabled(True)
lay = QtWidgets.QVBoxLayout(self)
lay.addWidget(self.first_checkbox)
lay.addWidget(self.second_checkbox)
@QtCore.Slot(QtCore.Qt.CheckState)
def _handleCheckboxStateChange(self, state):
self.second_checkbox.setEnabled(state == QtCore.Qt.Checked)
if state != QtCore.Qt.Checked:
self.second_checkbox.setCheckState(QtCore.Qt.Unchecked)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())