1. 复选框
QCheckBox 是 Qt 框架中的一个控件,用于在界面中表示一个可以被选中或取消选中的复选框。它通常用于允许用户在多个选项之间进行选择。在 Python 中使用 PyQt 或 PySide 开发 GUI 应用程序时,可以使用 QCheckBox 控件来实现复选框。
2.基本用法
PyQt5 简单创建 QCheckBox 的用法如下,在构建 QCheckBox 的同时带入复选框的显示文字,之后使用 move 移动到想要显示的坐标上。
#!/usr/bin/env python3
# -- coding: utf-8 --
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QCheckBoxclass MyWidget(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('my window')self.setGeometry(50, 50, 200, 150)self.checkbox = QCheckBox('PyQt5', self)self.checkbox.move(60, 50)if __name__ == '__main__':app = QApplication(sys.argv)w = MyWidget()w.show()sys.exit(app.exec_())
结果图如下:
使用 QVBoxLayout 来排版多个 QCheckBox
#!/usr/bin/env python3
# -- coding: utf-8 --
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBoxclass MyWidget(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('my window')self.setGeometry(50, 50, 200, 150)layout = QVBoxLayout(self)self.checkbox1 = QCheckBox('C++', self)layout.addWidget(self.checkbox1)self.checkbox2 = QCheckBox('Python', self)layout.addWidget(self.checkbox2)self.checkbox3 = QCheckBox('Rust', self)layout.addWidget(self.checkbox3)self.checkbox4 = QCheckBox('Java', self)layout.addWidget(self.checkbox4)if __name__ == '__main__':app = QApplication(sys.argv)w = MyWidget()w.show()sys.exit(app.exec_())
结果图如下:
3.默认的选项
PyQt5 设置 QCheckBox 默认的选项,建立 QCheckBox 后默认是不勾选的状态,有两种方式可以改变这个状态:
-
使用
QCheckBox.toggle()
方法可以切换 QCheckBox 的选中状态。如果 QCheckBox 最初是不勾选的,调用toggle()
方法后它将变为勾选状态;如果最初是勾选的,调用toggle()
方法后它将变为不勾选状态。 -
使用
QCheckBox.setChecked()
方法可以直接设置 QCheckBox 的选中状态。你可以将参数设置为True
(勾选)或False
(不勾选),以设定 QCheckBox 的默认状态。
以下是使用这两种方法的示例代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBoxclass MyWidget(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('My Window')self.setGeometry(100, 100, 300, 200)layout = QVBoxLayout(self)# 创建 QCheckBox,并将其默认设为勾选状态self.checkbox1 = QCheckBox('Option 1', self)self.checkbox1.setChecked(True)layout.addWidget(self.checkbox1)# 创建另一个 QCheckBox,并使用 toggle() 方法切换其默认状态self.checkbox2 = QCheckBox('Option 2', self)self.checkbox2.toggle() # 切换默认状态layout.addWidget(self.checkbox2)if __name__ == '__main__':app = QApplication(sys.argv)w = MyWidget()w.show()sys.exit(app.exec_())
在这个示例中,checkbox1
默认为勾选状态(使用 setChecked(True)
),而 checkbox2
默认为不勾选状态(使用 toggle()
方法)。
结果图如下:
4. 绑定事件
PyQt5 QCheckBox 绑定事件可以用 QCheckBox.clicked.connect(),或者是 QCheckBox.stateChanged.connect() 这两种信号,将信号绑定到对应处理的函数。
而在处理函数里可以使用 QCheckBox.isChecked() 来判断该 CheckBox 是否被 check 了,
#!/usr/bin/env python3
# -- coding: utf-8 --
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QCheckBox)class MyWidget(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('my window')self.setGeometry(50, 50, 200, 150)layout = QVBoxLayout()self.setLayout(layout)self.checkbox1 = QCheckBox('C++', self)self.checkbox1.clicked.connect(self.onCheckBox1Click)layout.addWidget(self.checkbox1)self.checkbox2 = QCheckBox('Python', self)self.checkbox2.clicked.connect(self.onCheckBox2Click)layout.addWidget(self.checkbox2)self.checkbox3 = QCheckBox('Rust', self)self.checkbox3.clicked.connect(self.onCheckBox3Click)layout.addWidget(self.checkbox3)self.checkbox4 = QCheckBox('Java', self)self.checkbox4.clicked.connect(self.onCheckBox4Click)layout.addWidget(self.checkbox4)def onCheckBox1Click(self):if self.checkbox1.isChecked():print('C++ is checked')else:print('C++ is unchecked')def onCheckBox2Click(self):if self.checkbox2.isChecked():print('Python is checked')else:print('Python is unchecked')def onCheckBox3Click(self):if self.checkbox3.isChecked():print('Rust is checked')else:print('Rust is unchecked')def onCheckBox4Click(self):if self.checkbox4.isChecked():print('Java is checked')else:print('Java is unchecked')if __name__ == '__main__':app = QApplication(sys.argv)w = MyWidget()w.show()sys.exit(app.exec_())
也可以这几个 CheckBox 全部绑定同一个事件处理函数,而在 onCheckBoxClick() 处理函数里透过 self.sender() 的方式可以取得是哪一个 CheckBox,范例如下,
#!/usr/bin/env python3
# -- coding: utf-8 --
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QCheckBox)class MyWidget(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('my window')self.setGeometry(50, 50, 200, 150)layout = QVBoxLayout()self.setLayout(layout)self.checkbox1 = QCheckBox('C++', self)self.checkbox1.clicked.connect(self.onCheckBoxClick)layout.addWidget(self.checkbox1)self.checkbox2 = QCheckBox('Python', self)self.checkbox2.clicked.connect(self.onCheckBoxClick)layout.addWidget(self.checkbox2)self.checkbox3 = QCheckBox('Rust', self)self.checkbox3.clicked.connect(self.onCheckBoxClick)layout.addWidget(self.checkbox3)self.checkbox4 = QCheckBox('Java', self)self.checkbox4.clicked.connect(self.onCheckBoxClick)layout.addWidget(self.checkbox4)def onCheckBoxClick(self):checkbox = self.sender()if checkbox.isChecked():print(checkbox.text() + ' is checked')else:print(checkbox.text() + ' is unchecked')if __name__ == '__main__':app = QApplication(sys.argv)w = MyWidget()w.show()sys.exit(app.exec_())