大家好,这里是昨天软件的Python学习日记。
今天是系统学习Python的第18天,我们正式深入 PyQt6 桌面GUI开发 的核心板块——全部常用基础控件。 做桌面窗口开发,本质就是用各类控件搭建界面、绑定交互逻辑。本文严格按照思维导图分类,梳理所有控件的基础概念、功能用途、API说明,同时给每一个分类都配套完整可直接运行的演示代码,新手入门收藏这一篇就足够全面。

在学习具体控件之前,我们先吃透PyQt6控件最底层的基础规则。
PyQt6 所有可视化界面控件,都拥有统一的继承体系:
QFrame ← QWidgetQWidget 基础上拓展了边框、背景、区域分割能力,是绝大多数界面功能控件的直接父类。所有下文讲到的按钮、输入框、选择框、容器控件,全部继承这套底层体系,基类的通用方法所有控件都可以直接调用。
Qt 官方全程统一 大驼峰命名法(UpperCamelCase),也是我们开发必须遵守的编码规范:
PushButton、LineEdit、ComboBoxself.name_line_edit、self.confirm_btnbtn1、edit2这类无意义命名,方便后续项目维护。文本类是GUI界面最高频使用的控件,主要负责文本展示、内容输入、数字显示与调节,覆盖界面90%的文字、数字交互场景。 包含控件:Label、LineEdit、TextEdit、SpinBox、DoubleSpinBox、LCDNumber

import sysfrom PyQt6.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit, QTextEdit, QSpinBox, QDoubleSpinBox, QLCDNumber, QVBoxLayout)class TextWidgetDemo(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle("文本类控件演示")self.resize(400, 500) layout = QVBoxLayout()# 1. Label 标签self.label = QLabel("我是Label标签控件,用于静态文本展示") layout.addWidget(self.label)# 2. LineEdit 单行文本框self.line_edit = QLineEdit()self.line_edit.setPlaceholderText("请输入单行文本内容") layout.addWidget(self.line_edit)# 3. TextEdit 多行文本框self.text_edit = QTextEdit()self.text_edit.setPlaceholderText("此处可以输入大段多行文本内容") layout.addWidget(self.text_edit)# 4. SpinBox 整数数字选择self.spin_box = QSpinBox()self.spin_box.setRange(0, 100) # 设置数值范围 layout.addWidget(self.spin_box)# 5. DoubleSpinBox 小数数字选择self.double_spin = QDoubleSpinBox()self.double_spin.setRange(0, 100)self.double_spin.setDecimals(2) # 保留2位小数 layout.addWidget(self.double_spin)# 6. LCDNumber 液晶数字显示self.lcd_num = QLCDNumber()self.lcd_num.display(88.88) # 设置显示数字 layout.addWidget(self.lcd_num)self.setLayout(layout)if __name__ == "__main__": app = QApplication(sys.argv) window = TextWidgetDemo() window.show() sys.exit(app.exec())按钮是所有用户交互、事件触发的核心控件,负责响应用户点击操作,覆盖普通点击、单选、多选、引导跳转全部交互场景。 包含控件:PushButton、ToolButton、CommandLinkButton、RadioButton、CheckBox

import sysfrom PyQt6.QtWidgets import (QApplication, QWidget, QPushButton, QToolButton, QCommandLinkButton, QRadioButton, QCheckBox, QVBoxLayout)from PyQt6.QtGui import QIconclass ButtonWidgetDemo(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle("按钮类控件演示")self.resize(400, 400) layout = QVBoxLayout()# 1. PushButton 普通按钮self.btn = QPushButton("我是普通PushButton按钮")self.btn.clicked.connect(self.btn_click) # 绑定点击事件 layout.addWidget(self.btn)# 2. ToolButton 工具按钮self.tool_btn = QToolButton()self.tool_btn.setText("工具按钮") layout.addWidget(self.tool_btn)# 3. CommandLinkButton 命令链接按钮self.link_btn = QCommandLinkButton()self.link_btn.setText("功能跳转按钮")self.link_btn.setDescription("点击跳转对应功能模块") layout.addWidget(self.link_btn)# 4. RadioButton 单选按钮(互斥)self.radio1 = QRadioButton("选项A(单选)")self.radio2 = QRadioButton("选项B(单选)") layout.addWidget(self.radio1) layout.addWidget(self.radio2)# 5. CheckBox 复选框(多选)self.check1 = QCheckBox("多选选项1")self.check2 = QCheckBox("多选选项2") layout.addWidget(self.check1) layout.addWidget(self.check2)self.setLayout(layout)# 按钮点击事件函数def btn_click(self):print("普通按钮被点击了!")if __name__ == "__main__": app = QApplication(sys.argv) window = ButtonWidgetDemo() window.show() sys.exit(app.exec())专门处理多选项选择、下拉折叠、长列表数据展示场景,在选项数量多、窗口空间有限的界面里非常实用,完美解决大量选项平铺拥挤的问题。 包含控件:ComboBox、FontComboBox、ListWidget

import sysfrom PyQt6.QtWidgets import (QApplication, QWidget, QComboBox, QFontComboBox, QListWidget, QVBoxLayout)class SelectWidgetDemo(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle("选择列表类控件演示")self.resize(400, 400) layout = QVBoxLayout()# 1. ComboBox 下拉组合框self.combo = QComboBox()self.combo.addItems(["Python", "Java", "C++", "Go语言"]) layout.addWidget(self.combo)# 2. FontComboBox 字体组合框self.font_combo = QFontComboBox() layout.addWidget(self.font_combo)# 3. ListWidget 列表控件self.list_widget = QListWidget()self.list_widget.addItems(["列表条目1", "列表条目2", "列表条目3", "列表条目4"]) layout.addWidget(self.list_widget)self.setLayout(layout)if __name__ == "__main__": app = QApplication(sys.argv) window = SelectWidgetDemo() window.show() sys.exit(app.exec())容器控件本身不承担业务交互功能,核心作用是收纳、分组、管理内部子控件,实现界面分区排版,让复杂窗口结构整洁清晰,是大型界面开发的骨架基础。 包含控件:GroupBox、TabWidget、ToolBox

import sysfrom PyQt6.QtWidgets import (QApplication, QWidget, QGroupBox, QTabWidget, QToolBox, QLabel, QVBoxLayout)class ContainerWidgetDemo(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle("容器控件演示")self.resize(450, 400) layout = QVBoxLayout()# 1. GroupBox 分组框self.group_box = QGroupBox("基础信息分组") group_layout = QVBoxLayout() group_layout.addWidget(QLabel("分组内的内容控件1")) group_layout.addWidget(QLabel("分组内的内容控件2"))self.group_box.setLayout(group_layout) layout.addWidget(self.group_box)# 2. TabWidget 选项卡self.tab_widget = QTabWidget()# 创建3个标签页 tab1 = QLabel("第一个选项卡页面") tab2 = QLabel("第二个选项卡页面") tab3 = QLabel("第三个选项卡页面")self.tab_widget.addTab(tab1, "页面1")self.tab_widget.addTab(tab2, "页面2")self.tab_widget.addTab(tab3, "页面3") layout.addWidget(self.tab_widget)# 3. ToolBox 工具箱(折叠面板)self.tool_box = QToolBox()self.tool_box.addItem(QLabel("工具模块1内容"), "模块一")self.tool_box.addItem(QLabel("工具模块2内容"), "模块二") layout.addWidget(self.tool_box)self.setLayout(layout)if __name__ == "__main__": app = QApplication(sys.argv) window = ContainerWidgetDemo() window.show() sys.exit(app.exec())专门处理日期、时间选择、日历展示相关业务,适配日程、时间填写、日期筛选、时间戳相关开发场景。 整体分为两大模块,细分4个专用控件:

import sysfrom PyQt6.QtWidgets import (QApplication, QWidget, QDateEdit, QTimeEdit, QDateTimeEdit, QCalendarWidget, QVBoxLayout)class DateTimeWidgetDemo(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle("日期时间类控件演示")self.resize(400, 500) layout = QVBoxLayout()# 1. DateEdit 仅日期选择self.date_edit = QDateEdit() layout.addWidget(self.date_edit)# 2. TimeEdit 仅时间选择self.time_edit = QTimeEdit() layout.addWidget(self.time_edit)# 3. DateTimeEdit 日期+时间一体化self.datetime_edit = QDateTimeEdit() layout.addWidget(self.datetime_edit)# 4. CalendarWidget 完整日历面板self.calendar = QCalendarWidget() layout.addWidget(self.calendar)self.setLayout(layout)if __name__ == "__main__": app = QApplication(sys.argv) window = DateTimeWidgetDemo() window.show() sys.exit(app.exec())QWidget 基类,基类通用属性、方法全部互通,学会基础控件就能快速拓展所有组件。Python桌面开发学习持续更新,后续会基于今天的全部控件,做综合界面实战项目、布局管理、样式美化全套教程。 关注我,一起从Python基础入门,一步步掌握全栈GUI桌面开发。