GUI-1.5h-快速入门桌面应用开发-PyQt

image-20240227015315491

image-20240227015449273


阅读须知

image-20240227015846410


主要内容(概括)

image-20240227020259984


环境安装

  • pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
  • pip install PyQt5 PyQtWebEngine -> 如果不需要 web转gui 的功能 , 可以不安装

需要注意

1-

  • 如果是在 jupyter 上运行,每次运行后或许报错,刷新 内核即可
  • 报错内容
    image-20240227014253638
  • 刷新内核 点击一个类似的按键
    image-20240227014225919

2-

  • 如果代码运行现实的窗口与预期不相同,如同这样

image-20240227012817757

  • 可能是没设置窗口放缩
  • 因为由于不清楚大家屏幕大小,所以我所给代码并没有设置窗口大小
  • 希望大家用鼠标,放在窗口边沿,自己调整测试

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的信号。
  • 槽:一个槽是一个响应信号的函数。当与信号关联的特定事件发生时,关联的槽函数会被调用。

image-20240227012817757

# 实现功能:创建一个按钮,当点击这个按钮时,在控制台打印消息。
# 实现思路: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类。

image-20240227013037513

# 实现功能:创建一个主窗口并设置其标题。
# 实现思路: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,它们允许您以水平、垂直或网格形式组织小部件。

水平布局

image-20240227013213075

垂直布局

image-20240227013245622

网格布局

image-20240227013307536

# 实现功能:创建一个窗口,其中包含两个水平排列的按钮。
# 实现思路: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渲染 -> 或许可以大大加快开发流程

image-20240227013713956

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_())

image-20240227014955864

  • 12
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值