PyQt5零基础入门:选项框(QRadioButton、QCheckBox)与下拉框(QComboBox)

前言

选项框(QRadioButton和QCheckBox)和下拉框(QComboBox)都是Qt框架中常用的控件,用于用户输入和界面交互。下面是它们的简单介绍。

单选框按钮控件(QRadioButton)

QRadioButton(单选按钮)通常用于在一组选项中只能选择一个的情况。用户可以点击以选中或取消选中一个单选按钮。

python 复制代码
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys


class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.bulb_pic = QLabel()
        self.bulb_pic.setPixmap(QPixmap('bulb-off.jpg'))

        self.radio_btn1 = QRadioButton('关')
        self.radio_btn2 = QRadioButton('开')
        self.radio_btn1.setChecked(True)
        self.radio_btn1.toggled.connect(self.turn_off)
        self.radio_btn2.toggled.connect(self.turn_on)

        h_layout = QHBoxLayout()
        h_layout.addWidget(self.bulb_pic)
        h_layout.addWidget(self.radio_btn1)
        h_layout.addWidget(self.radio_btn2)
        self.setLayout(h_layout)

    def turn_off(self):
        # print("关")
        self.bulb_pic.setPixmap(QPixmap('bulb-off.jpg'))

    def turn_on(self):
        # print("开")
        self.bulb_pic.setPixmap(QPixmap('bulb-on.jpg'))


if __name__ == "__main__":
    app = QApplication([])
    win = Window()
    win.show()
    sys.exit(app.exec())

在代码中,使用了两个灯泡的图片(bulb-on.jpg和bulb-off.jpg),使用单选框可以控制灯泡亮暗

运行结果如下:

需要注意的是属于同一个父类的单选框按钮之间是互斥的。

复选框按钮控件(QCheckBox)

QCheckBox(复选框)与单选按钮类似,但允许多选。用户可以点击以选中或取消选中一个复选框。与单选框不同,复选框有三种状态:全选中,半选中,未选中。

python 复制代码
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys


class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.check_box1 = QCheckBox("check 1")
        self.check_box2 = QCheckBox("check 2")
        self.check_box3 = QCheckBox("check 3")

        self.check_box1.setChecked(True)
        self.check_box2.setChecked(False)
        self.check_box3.setTristate(True)  # 增加半选功能
        self.check_box3.setCheckState(Qt.PartiallyChecked)  # 设置半选功能

        self.check_box1.stateChanged.connect(self.show_state)
        self.check_box2.stateChanged.connect(self.show_state)
        self.check_box3.stateChanged.connect(self.show_state)

        v_layout =QVBoxLayout()
        v_layout.addWidget(self.check_box1)
        v_layout.addWidget(self.check_box2)
        v_layout.addWidget(self.check_box3)
        self.setLayout(v_layout)

    def show_state(self):
        print(self.sender().checkState())


if __name__ == "__main__":
    app = QApplication([])
    win = Window()
    win.show()
    sys.exit(app.exec())

运行结果如下:

check1,check2,check3分别为全选、不选、半选。 默认复选框只有全选和不选的选项,如果需要设置半选则需要使用setTristate(True),而设置半选状态则需要使用setCheckState(Qt.PartiallyChecked)。除此之外在setCheckState中还可以有几种状态参数。

复选框的3种状态

常量 描述
Qt.Unchecked 未选状态
Qt.PartiallyChecked 半选状态
Qt.Checked 选中状态

每个复选框按钮的stateChanged信号都绑定show_state函数,槽函数的作用是获取复选框按钮的状态并输出。

下拉框按钮控件(QComboBox)

QComboBox(下拉框)允许用户从下拉列表中选择一个或多个选项。

python 复制代码
from PyQt5.QtWidgets import *
import sys


class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.combo_box = QComboBox()
        self.combo_box.addItem('Louis')
        self.combo_box.addItems(["Mike", "Mary", "John"])
        self.combo_box.currentIndexChanged.connect(self.show_choice)

        self.combo_box.setEditable(True)
        self.line_edit = self.combo_box.lineEdit()
        self.line_edit.textChanged.connect(self.show_edited_text)

        h_layout = QHBoxLayout()
        h_layout.addWidget(self.combo_box)
        self.setLayout(h_layout)

    def show_choice(self):
        print(self.combo_box.currentIndex())
        print(self.combo_box.currentText())

    def show_edited_text(self):
        print(self.line_edit.text())


if __name__ == "__main__":
    app = QApplication([])
    win = Window()
    win.show()
    sys.exit(app.exec())

运行结果如下:

在代码中,我们可以通过addItem方法添加单个选项,如果要添加多个选项则可以使用addItems。

当用户选择了一个不同的选项时,currentIndexChanged信号就会发射,槽函数就会调用currentIndex和currentText来输出当前选项的索引值和文本内容。

调用setEditable(True)方法后,QComboBox控件上显示了一个单行文本框。可以使用lineEdit来获取输入框对象。

相关推荐
懷淰メ11 小时前
python3GUI--【AI加持】基于PyQt5+YOLOv8+DeepSeek的智能球体检测系统:(详细介绍)
yolo·目标检测·计算机视觉·pyqt·检测系统·deepseek·球体检测
mortimer8 天前
【实战复盘】 PySide6 + PyTorch 偶发性“假死”?由多线程转多进程
pytorch·python·pyqt
S***y3969 天前
算法挑战算法的广泛应用,它们也带来了一系列挑战,这些挑战不仅关乎技术层面,更涉及伦理、法律和社会等多个维度。
kafka·pyqt·宽度优先
AI视觉网奇10 天前
pyqt 横竖屏切换
pyqt
mortimer14 天前
从零打造一款桌面实时语音转文字工具:PySide6 与 Sherpa-Onnx 的实践
python·github·pyqt
开心-开心急了15 天前
PySide6/PyQt Ctrl 滚轮 实现文本缩放功能
pyqt·pyside
B站_计算机毕业设计之家18 天前
深度学习:Yolo水果检测识别系统 深度学习算法 pyqt界面 训练集测试集 深度学习 数据库 大数据 (建议收藏)✅
数据库·人工智能·python·深度学习·算法·yolo·pyqt
懷淰メ19 天前
python3GUI--短视频社交软件 By:Django+PyQt5(前后端分离项目)
后端·python·django·音视频·pyqt·抖音·前后端
开心-开心急了20 天前
pyside6实现win10自动切换主题
开发语言·python·pyqt·pyside