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, QCheckBox
class 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, 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)
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, QCheckBox
class 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_())