PyQt5 基础入门:环境搭建、布局管理与常用控件详解
什么是 PyQt5?
PyQt5 是基于 Qt 库的 Python GUI 框架。Qt 本身是一个跨平台的 C++ 框架,而 PyQt5 让我们能用 Python 轻松构建支持 Windows、macOS 和 Linux 的桌面应用。
安装与环境配置
推荐使用 PyCharm 等 IDE 进行开发。确保已安装 Python 后,通过 pip 安装依赖:
pip install PyQt5
安装完成后,可在终端执行 pip list 确认是否包含 PyQt5。
第一个 PyQt5 程序
新建一个 main.py 文件,写入以下代码来展示一个基础窗口:
import sys
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PyQt5 第一个窗口")
label = QLabel("Hello, World!", self)
self.setCentralWidget(label)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
这段代码的核心逻辑在于:
- 导入模块:
sys用于处理命令行参数及退出进程,QApplication管理应用生命周期,QMainWindow定义主窗口结构。 - 自定义窗口:继承
QMainWindow并重写__init__方法。 - 设置中央控件:使用
setCentralWidget将标签置于窗口中心。 - 事件循环:
app.exec_()启动消息循环,保持窗口运行;sys.exit确保正常退出。
运行后应能看到标题为'PyQt5 第一个窗口'的弹窗。若未显示,请检查是否调用了 window.show() 或解释器是否正确。
布局管理器
手动计算控件坐标很繁琐,PyQt5 提供了布局管理器自动调整位置。
垂直与水平布局
结合 QVBoxLayout 和 QHBoxLayout 可以灵活组织控件:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PyQt5 布局示例")
central_widget = QWidget(self)
self.setCentralWidget(central_widget)
vbox_layout = QVBoxLayout()
label = QLabel("这是一个标签")
vbox_layout.addWidget(label)
hbox_layout = QHBoxLayout()
button1 = QPushButton("按钮 1")
button2 = QPushButton("按钮 2")
hbox_layout.addWidget(button1)
hbox_layout.addWidget(button2)
vbox_layout.addLayout(hbox_layout)
central_widget.setLayout(vbox_layout)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
这里先创建了垂直布局放标签,再将两个按钮放入水平布局,最后把水平布局嵌入垂直布局。这种嵌套方式能实现复杂的界面结构。
网格布局
对于表单类界面,QGridLayout 更为合适:
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QLabel, QPushButton
import sys
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QGridLayout 示例")
layout = QGridLayout()
layout.addWidget(QLabel("标签 1"), 0, 0)
layout.addWidget(QPushButton("按钮 1"), 0, 1)
layout.addWidget(QLabel("标签 2"), 1, 0)
layout.addWidget(QPushButton("按钮 2"), 1, 1)
self.setLayout(layout)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
addWidget(widget, row, column) 允许指定行列坐标,适合矩阵式排列。
常用控件详解
除了布局,掌握核心控件是开发的关键。
QLabel(标签)
用于显示文本或图片,支持对齐设置:
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow
from PyQt5.QtCore import Qt
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QLabel 示例")
label = QLabel("这是一个标签", self)
label.setAlignment(Qt.AlignCenter)
self.setCentralWidget(label)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
QPushButton(按钮)
触发点击事件的核心组件,需连接信号与槽:
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QPushButton 示例")
button = QPushButton("点击我", self)
button.clicked.connect(self.button_clicked)
self.setCentralWidget(button)
def button_clicked(self):
print("按钮被点击!")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
QLineEdit(单行文本框)
接收用户输入,可通过 returnPressed 信号响应回车:
from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QLineEdit 示例")
self.line_edit = QLineEdit(self)
self.line_edit.setPlaceholderText("请输入文本")
self.setCentralWidget(self.line_edit)
self.line_edit.returnPressed.connect(self.return_pressed)
def return_pressed(self):
text = self.line_edit.text()
print(f"用户输入:{text}")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
QCheckBox(复选框)
处理布尔选项,监听状态变化:
from PyQt5.QtWidgets import QApplication, QMainWindow, QCheckBox
from PyQt5.QtCore import Qt
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QCheckBox 示例")
self.checkbox = QCheckBox("同意条款", self)
self.checkbox.stateChanged.connect(self.checkbox_changed)
self.setCentralWidget(self.checkbox)
def checkbox_changed(self, state):
if state == Qt.Checked:
print("复选框被勾选")
else:
print("复选框未被勾选")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
QComboBox(下拉列表)
提供选项选择功能:
from PyQt5.QtWidgets import QApplication, QMainWindow, QComboBox
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QComboBox 示例")
self.combobox = QComboBox(self)
self.combobox.addItems(["选项 1", "选项 2", "选项 3"])
self.combobox.currentIndexChanged.connect(self.combobox_changed)
self.setCentralWidget(self.combobox)
def combobox_changed(self, index):
text = self.combobox.currentText()
print(f"当前选中:{text}")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
总结
本部分涵盖了 PyQt5 的基础流程:从环境安装到首个窗口创建,再到布局管理器的灵活运用,以及 Label、Button、LineEdit 等常用控件的信号处理。掌握这些内容,就具备了构建基本桌面界面的能力。后续可在此基础上深入信号槽机制、样式表定制及复杂业务逻辑的实现。


