PyQt5 入门(上):开启 GUI 编程之旅
PyQt5 入门(上):开启 GUI 编程之旅
一、PyQt(上)
1.1 PyQt5 简介和环境搭建
PyQt5 是 Python 语言的 GUI 框架,它将 Qt 库的强大功能与 Python 的简洁易用相结合,让开发者能够高效地创建出美观、交互性强的桌面应用程序,比如各类图形工具、数据管理软件等。
要搭建 PyQt5 开发环境,非常简单。首先确保你的电脑已经安装了 Python 环境,然后打开命令行终端,执行以下命令安装 PyQt5:
pip install PyQt5
如果想要更方便地进行界面设计(比如使用 Qt Designer 工具),还可以安装 PyQt5-tools:
pip install PyQt5-tools
安装完成后,就可以开始 PyQt5 的学习之旅啦。
1.2 第一个 Qt 程序
1.2.1 第一个 Qt 窗口
下面是创建第一个简单 Qt 窗口的代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget# 创建应用程序对象
app = QApplication(sys.argv)
# 创建窗口对象
window = QWidget()
# 设置窗口标题
window.setWindowTitle('我的第一个 Qt 窗口')
# 设置窗口大小
window.resize(400, 300)
# 显示窗口
window.show()
# 进入应用程序的主循环,等待用户操作
sys.exit(app.exec_())
运行这段代码,会弹出一个标题为“我的第一个 Qt 窗口”,大小为 400x300 的窗口,这就是我们的第一个 Qt 程序窗口啦。
1.2.2 窗口的相关设置
我们可以对窗口进行更多设置,比如设置窗口图标、背景颜色等。以下是示例代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIconapp = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('设置丰富的窗口')
# 设置窗口图标,将 icon.png 替换为你的图标文件路径
window.setWindowIcon(QIcon('icon.png'))
# 设置窗口大小
window.resize(500, 400)
# 使用样式表设置窗口背景颜色为浅蓝色
window.setStyleSheet('background-color: lightblue;')
window.show()
sys.exit(app.exec_())
运行后,窗口会显示指定的图标,背景是浅蓝色,更加个性化。
1.2.3 添加模板代码
在实际开发中,为了让代码结构更清晰,我们可以将窗口相关的代码封装成类。以下是一个简单的模板代码示例:
import sys
from PyQt5.QtWidgets import QApplication, QWidgetclass MyWindow(QWidget):def __init__(self):super().__init__()# 调用初始化界面的方法self.initUI()def initUI(self):self.setWindowTitle('模板窗口')self.resize(600, 500)if __name__ == '__main__':app = QApplication(sys.argv)# 创建自定义窗口对象window = MyWindow()window.show()sys.exit(app.exec_())
这样的结构在开发复杂应用时,更便于维护和扩展。
1.3 常用控件
1.3.1 标签 QLabel
QLabel 主要用于显示文字或图片信息。
- 1.3.1.1 显示文字
示例代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabelapp = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('显示文字标签')
window.resize(300, 200)
# 创建标签并设置文字内容
label = QLabel('这是一个显示文字的标签', window)
window.show()
sys.exit(app.exec_())
运行后,窗口中会显示出“这是一个显示文字的标签”这段文字。
- 1.3.1.2 显示图片
示例代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QPixmapapp = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('显示图片标签')
window.resize(400, 300)
label = QLabel(window)
# 加载图片,将 image.jpg 替换为你的图片文件路径
pixmap = QPixmap('image.jpg')
# 设置图片到标签上
label.setPixmap(pixmap)
window.show()
sys.exit(app.exec_())
运行后,窗口中的标签会显示指定的图片。
1.3.2 输入框
输入框用于接收用户的输入内容,PyQt5 提供了单行输入框和文本输入框。
- 1.3.2.1 单行输入框 QLineEdit
示例代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QVBoxLayoutapp = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('单行输入框')
window.resize(300, 150)
layout = QVBoxLayout()
# 创建单行输入框
line_edit = QLineEdit()
# 设置占位提示文字
line_edit.setPlaceholderText('请输入单行内容')
layout.addWidget(line_edit)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
运行后,可在输入框中输入单行文本,有占位提示文字引导。
- 1.3.2.2 文本输入框 QTextEdit
示例代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QVBoxLayoutapp = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('文本输入框')
window.resize(400, 300)
layout = QVBoxLayout()
# 创建文本输入框
text_edit = QTextEdit()
# 设置占位提示文字
text_edit.setPlaceholderText('请输入多行文本内容')
layout.addWidget(text_edit)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
运行后,可在输入框中输入多行文本,适合大量文字输入。
1.3.3 按钮 QPushButton
QPushButton 是按钮控件,用户点击按钮可触发相应操作。示例代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QVBoxLayoutapp = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('按钮示例')
window.resize(300, 200)
layout = QVBoxLayout()
button = QPushButton('点击我')def on_click():# 弹出提示框QMessageBox.information(window, '提示', '按钮被点击了!')# 将按钮的点击信号与槽函数连接
button.clicked.connect(on_click)
layout.addWidget(button)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
运行后,点击“点击我”按钮,会弹出提示框显示“按钮被点击了!”。
1.4 信号和槽
信号和槽是 PyQt5 中用于对象间通信的机制,当一个对象发出信号时,连接到该信号的槽函数会被调用。
1.4.1 按钮的信号与槽
前面按钮的示例已经用到了信号和槽,button.clicked.connect(on_click)
就是将按钮的 clicked
信号连接到 on_click
槽函数,当按钮被点击时,clicked
信号触发,on_click
函数执行。
1.4.2 系统的信号和槽函数
系统也提供了一些信号,比如窗口的关闭信号。我们可以连接这些信号到自定义的槽函数。示例代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMessageBoxapp = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('系统信号示例')
window.resize(300, 200)def close_window():reply = QMessageBox.question(window, '确认', '确定要关闭窗口吗?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)if reply == QMessageBox.Yes:window.close()# 重写窗口的关闭事件处理函数,连接自定义的槽函数逻辑
window.closeEvent = lambda event: close_window()
window.show()
sys.exit(app.exec_())
运行后,当尝试关闭窗口时,会弹出确认框,询问是否确定关闭,根据选择执行相应操作。