阅读须知
主要内容(概括)
环境安装
- pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip install PyQt5 PyQtWebEngine -> 如果不需要 web转gui 的功能 , 可以不安装
需要注意
1-
- 如果是在 jupyter 上运行,每次运行后或许报错,刷新 内核即可
- 报错内容
- 刷新内核 点击一个类似的按键
2-
- 如果代码运行现实的窗口与预期不相同,如同这样
- 可能是没设置窗口放缩
- 因为由于不清楚大家屏幕大小,所以我所给代码并没有设置窗口大小
- 希望大家用鼠标,放在窗口边沿,自己调整测试
PyQt 介绍
Leon:
- 美观 \ 拓展性强 \ 基于Python \ 多种平台上能运行
官方说法:
PyQt是一个Python绑定的跨平台GUI工具包。
它将Qt库(一种著名的C++框架用于创建图形用户界面应用程序)的功能与Python编程语言的灵活性结合起来。
通过PyQt,你可以创建具有专业外观和感觉的桌面应用程序,并且因为Qt库的跨平台性质,这些应用程序可以在Windows、macOS、Linux等不同操作系统上运行而无需修改代码。
PyQt广泛用于开发桌面应用程序,包括数据库应用、数据可视化工具、文件管理器和更多。
它支持SQL数据库、网络、XML和其他高级功能,让开发者能够构建功能丰富、响应迅速的软件。
PyQt与其他Python GUI框架的比较
Tkinter:Python的标准GUI库,比PyQt更简单,适合小型和中型项目。Tkinter比PyQt更易于学习,但它的用户界面不如PyQt那样现代和美观。
wxPython:另一个跨平台的Python GUI库,类似于PyQt,提供了丰富的控件和工具。wxPython的用户界面比Tkinter好,但通常认为不如PyQt流畅和现代。
Kivy:专注于触摸屏应用的Python库,适用于开发多点触控应用。与PyQt相比,Kivy在创建跨平台的移动应用方面表现更好,但在桌面应用方面则不如PyQt那样成熟。
FLTK、PyGTK等:其他一些库也提供了Python绑定,但它们要么在功能上不如PyQt全面,要么在社区支持和文档方面不如PyQt丰富。
基础概念介绍
信号和槽机制
Leon:
信号指的是人的动作对计算机产生的影响
槽指的是,计算机被人的动作影响后应该做出的反应所对应的函数代码
官方说法:
信号和槽机制:
- 了解PyQt中的事件处理
- 在PyQt中,交互主要通过信号和槽机制实现。这是一种事件驱动编程的模式,用于对象间的通信。
- 信号:当特定事件发生时,对象会发出(emit)一个信号。例如,当用户点击按钮时,按钮对象会发出一个被称为clicked的信号。
- 槽:一个槽是一个响应信号的函数。当与信号关联的特定事件发生时,关联的槽函数会被调用。
# 实现功能:创建一个按钮,当点击这个按钮时,在控制台打印消息。
# 实现思路:1. 创建一个应用程序实例;2. 创建一个按钮;3. 将按钮点击信号连接到自定义的槽函数;4. 显示按钮;5. 进入应用程序的主事件循环。
from PyQt5.QtWidgets import QApplication, QPushButton # 导入必要的模块
def on_button_clicked(): # 定义一个槽函数
print("Button clicked!") # 当按钮被点击时,打印一条消息
app = QApplication([]) # 创建一个应用程序实例
button = QPushButton('Click me') # 创建一个按钮,文本为"Click me"
button.clicked.connect(on_button_clicked) # 将按钮的clicked信号连接到on_button_clicked槽函数
button.show() # 显示按钮
app.exec_() # 进入应用程序的主事件循环
基础内容(界面+组件)
Leon:
主窗口就是你看到的界面
对话框就是界面上和你交互的东西
小部件就是除前两者之外的常见的东西
官方说法:
- 主窗口、对话框和小部件(Widgets):掌握PyQt应用中的基础元素
- 主窗口:是大多数应用程序的核心,通常包含菜单栏、工具栏和状态栏。在PyQt中,QMainWindow类用于创建主窗口。
- 对话框:用于短期任务和简短的用户交互,如文件选择或设置。PyQt提供了QDialog类来创建对话框。
- 小部件(Widgets):构成PyQt应用程序用户界面的基本元素,如按钮、标签、文本框等。所有小部件都继承自QWidget类。
# 实现功能:创建一个主窗口并设置其标题。
# 实现思路:1. 创建一个应用程序实例;2. 创建一个主窗口实例;3. 设置窗口标题;4. 显示窗口;5. 进入应用程序的主事件循环。
from PyQt5.QtWidgets import QApplication, QMainWindow # 导入必要的模块
app = QApplication([]) # 创建一个应用程序实例
main_window = QMainWindow() # 创建一个主窗口实例
main_window.resize(800,300) # 设置窗口大小
main_window.setWindowTitle('My Main Window') # 设置主窗口的标题为"My Main Window"
main_window.show() # 显示主窗口
app.exec_() # 进入应用程序的主事件循环
布局管理(排版\位置摆放\布局)
Leon:
布局管理 -> 小部件和界面怎么整合摆放
可以 以水平、垂直或网格形式组织小部件
官方说法:
- 布局管理:学习如何安排和管理小部件的位置
- 布局管理是指在窗口中组织小部件的方式。
- PyQt提供了多种布局管理器,如QHBoxLayout、QVBoxLayout和QGridLayout,它们允许您以水平、垂直或网格形式组织小部件。
水平布局
垂直布局
网格布局
# 实现功能:创建一个窗口,其中包含两个水平排列的按钮。
# 实现思路:1. 创建一个应用程序实例;2. 创建一个窗口和一个水平布局;3. 创建两个按钮并添加到布局中;4. 设置窗口布局;5. 显示窗口;6. 进入应用程序的主事件循环。
from PyQt5.QtWidgets import QApplication, QHBoxLayout, QWidget, QPushButton
app = QApplication([]) # 创建应用程序实例
window = QWidget() # 创建一个窗口实例
layout = QHBoxLayout() # 创建一个水平布局实例
button1 = QPushButton('Button 1') # 创建第一个按钮
button2 = QPushButton('Button 2') # 创建第二个按钮
layout.addWidget(button1) # 将第一个按钮添加到布局中
layout.addWidget(button2) # 将第二个按钮添加到布局中
window.setLayout(layout) # 设置窗口的布局为之前创建的水平布局
window.show() # 显示窗口
app.exec_() # 进入应用程序的主事件循环
# 实现功能:创建一个窗口,其中包含两个垂直排列的按钮。
# 实现思路:1. 创建一个应用程序实例;2. 创建一个窗口和一个垂直布局;3. 创建两个按钮并添加到布局中;4. 设置窗口布局;5. 显示窗口;6. 进入应用程序的主事件循环。
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget, QPushButton # 导入必要的模块
app = QApplication([]) # 创建应用程序实例
window = QWidget() # 创建一个窗口实例
layout = QVBoxLayout() # 创建一个垂直布局实例
button1 = QPushButton('Button 1') # 创建第一个按钮
button2 = QPushButton('Button 2') # 创建第二个按钮
layout.addWidget(button1) # 将第一个按钮添加到布局中
layout.addWidget(button2) # 将第二个按钮添加到布局中
window.setLayout(layout) # 设置窗口的布局为之前创建的垂直布局
window.show() # 显示窗口
app.exec_() # 进入应用程序的主事件循环
# 实现功能:创建一个窗口,其中包含一个2x2的按钮网格。
# 实现思路:1. 创建一个应用程序实例;2. 创建一个窗口和一个网格布局;3. 创建四个按钮并添加到布局中的不同位置;4. 设置窗口布局;5. 显示窗口;6. 进入应用程序的主事件循环。
from PyQt5.QtWidgets import QApplication, QGridLayout, QWidget, QPushButton
app = QApplication([]) # 创建应用程序实例
window = QWidget() # 创建一个窗口实例
layout = QGridLayout() # 创建一个网格布局实例
# 创建四个按钮
button1 = QPushButton('Button 1')
button2 = QPushButton('Button 2')
button3 = QPushButton('Button 3')
button4 = QPushButton('Button 4')
# 将按钮添加到布局中的不同位置
layout.addWidget(button1, 0, 0) # 第一行第一列
layout.addWidget(button2, 0, 1) # 第一行第二列
layout.addWidget(button3, 1, 0) # 第二行第一列
layout.addWidget(button4, 1, 1) # 第二行第二列
window.setLayout(layout) # 设置窗口的布局为之前创建的网格布局
window.show() # 显示窗口
app.exec_() # 进入应用程序的主事件循环
做些小尝试
Leon:
创建一个窗口应用程序
添加配件
为交互部分绑定功能
官方说法:
步骤 1: 创建简单的窗口应用程序
- 首先,您需要创建一个应用程序实例和一个主窗口。这是任何PyQt应用程序的基础。
步骤 2: 添加和配置常用的小部件
- 接下来,您可以向窗口添加小部件,如按钮、标签和文本框。每个小部件都可以配置其属性,如文本、大小和位置。
步骤 3: 实现事件处理和用户交互
- 事件处理是应用程序的重要组成部分,它允许您的应用程序响应用户操作,例如点击按钮或输入文本。在PyQt中,这通常是通过信号和槽机制实现的。
'''
|Leon and His small Demo ...|
Leon:
- 下面是一个简单的示例代码,展示了如何构建一个包含按钮、标签和文本框的基本应用程序,并响应按钮点击事件
- 在这个示例中,我们首先创建了一个窗口和一个垂直布局。
- 然后,我们添加了一个标签、一个文本输入框和一个按钮到布局中。
- 我们还定义了一个函数 on_button_clicked,当按钮被点击时,它会更新标签的文本为 "Hello, " 后跟文本输入框中的文本。
- 最后,我们通过调用 app.exec_() 进入了应用程序的主事件循环。
---
Leon:
- 这段代码通过创建标准的GUI组件(如窗口、按钮、标签和文本框)和设置布局,演示了PyQt的基本用法。
- 用户交互逻辑被集成到了槽函数 on_button_clicked 中,这个函数会在按钮被点击时更新标签的文本。
- 这个简单的例子展示了如何使用PyQt框架来构建一个响应用户输入的图形界面应用程序。
'''
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel, QLineEdit
# 创建一个QApplication实例 -> 每个PyQt5应用程序都需要一个。它管理应用程序的控制流和主要设置。
app = QApplication([])
# 创建一个QWidget实例 -> 这将是我们的主窗口。QWidget是所有用户界面对象的基类。
window = QWidget()
window.setWindowTitle('My PyQt App') # 设置窗口的标题。
# 创建一个QVBoxLayout实例 -> 它是一个垂直布局类 -> 用于垂直地堆叠小部件。
layout = QVBoxLayout()
# 创建一个QLabel实例 -> 用于显示文本或图片。
label = QLabel('Hello, PyQt!')
layout.addWidget(label) # 将标签添加到布局中。
# 创建一个QLineEdit实例 -> 这是一个允许用户输入和编辑单行文本的小部件。
text_input = QLineEdit()
layout.addWidget(text_input) # 将文本框添加到布局中。
# 创建一个QPushButton实例 -> 这是一个按钮 -> 用户可以点击它。
button = QPushButton('Click Me')
# 定义一个槽函数 -> 当按钮被点击时将被调用。
def on_button_clicked():
label.setText(f'Hello, {text_input.text()}!') # 更新标签的文本为 "Hello, " 后跟文本框中的文本。
# 连接按钮的clicked信号到on_button_clicked槽函数。当按钮被点击时 -> 槽函数会被调用。
button.clicked.connect(on_button_clicked)
layout.addWidget(button) # 将按钮添加到布局中。
# 将之前创建的布局应用到主窗口上。
window.setLayout(layout)
# 调用show方法来显示窗口。在此之前 -> 窗口不会在屏幕上显示。
window.show()
# 进入应用程序的主事件循环。从这一点开始 -> 应用程序开始响应用户事件。exec_()方法将持续运行 -> 直到主窗口被关闭。
app.exec_()
Web 转 GUI
- 通过 html\css\js 完成 gui 开发的一种捷径 -> 开发好网页后,将pyqt 当作浏览器用
- 考虑到或许很多同学熟悉 网页设计开发,不熟悉 应用界面开发
- 通过此种方式 -> 通过 pyqt 打开网页,并借助pyqt渲染 -> 或许可以大大加快开发流程
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEngineView
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建一个QWebEngineView对象
self.browser = QWebEngineView()
# 设置要加载的网页URL
self.browser.setUrl(QUrl('https://blog.csdn.net/qq_55285739?type=blog'))
# 将浏览器小部件设置为中心小部件
self.setCentralWidget(self.browser)
# 设置窗口的大小
self.setGeometry(600, 300, 1200, 800)
# 设置窗口的标题
self.setWindowTitle('Hello,CSDN-Leon...')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())