在 PyQt5 中,你可以通过连接信号和槽来实现两个 CheckBox 之间的互斥关系。具体来说,当一个 CheckBox 被勾选时,另一个 CheckBox 应该被取消勾选,反之亦然。以下是一个示例代码,展示了如何实现这个功能,并在软件启动时默认选中第一个 CheckBox。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBox
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('CheckBox Example')
# 创建两个 CheckBox
self.checkbox = QCheckBox('Checkbox 1', self)
self.checkbox_2 = QCheckBox('Checkbox 2', self)
# 设置默认选中第一个 CheckBox
self.checkbox.setChecked(True)
# 连接信号和槽
self.checkbox.stateChanged.connect(self.on_checkbox_state_changed)
self.checkbox_2.stateChanged.connect(self.on_checkbox_2_state_changed)
# 布局
layout = QVBoxLayout()
layout.addWidget(self.checkbox)
layout.addWidget(self.checkbox_2)
self.setLayout(layout)
def on_checkbox_state_changed(self, state):
# 当 checkbox 状态改变时,改变 checkbox_2 的状态
# state 为 Qt.Unchecked (0) 或 Qt.Checked (2)
self.checkbox_2.setChecked(state == 0)
def on_checkbox_2_state_changed(self, state):
# 当 checkbox_2 状态改变时,改变 checkbox 的状态
self.checkbox.setChecked(state == 0)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
代码解释:
导入必要的模块:
sys
用于处理系统相关的操作,比如退出程序。QApplication
,QWidget
,QVBoxLayout
,QCheckBox
是 PyQt5 中用于创建 GUI 应用程序的类。
创建主窗口类
MyWindow
:- 继承自
QWidget
。 - 在
__init__
方法中调用initUI
方法来初始化用户界面。
- 继承自
初始化用户界面
initUI
:- 设置窗口标题。
- 创建两个
QCheckBox
对象。 - 设置第一个
QCheckBox
默认选中。 - 连接两个
QCheckBox
的stateChanged
信号到相应的槽函数。 - 使用
QVBoxLayout
布局管理器来管理两个QCheckBox
的布局。
槽函数:
on_checkbox_state_changed
:当第一个QCheckBox
的状态改变时,根据状态设置第二个QCheckBox
的状态。on_checkbox_2_state_changed
:当第二个QCheckBox
的状态改变时,根据状态设置第一个QCheckBox
的状态。
运行应用程序:
- 创建
QApplication
对象。 - 创建
MyWindow
对象并显示。 - 进入应用程序的主循环。
- 创建
这样,当你运行这个程序时,你会看到两个 CheckBox,并且第一个 CheckBox 默认是选中的。当你勾选或取消勾选其中一个 CheckBox 时,另一个 CheckBox 会自动取反。