使用VSCode 对PyQt5 say Hello—— Python + Qt 开发

1. 前言

使用vsCode 开发 PyQt5项目,对我来说,属于"熟悉的陌生人":之前经常使用visual studio和Qt框架,当然python也学过一点语法。这次直接用VSCode写具体的PyQt5项目,在基于现有项目可参考的基础上,属于先模仿,再学习。现在项目模仿写的差不多了,又有了时间,可以细细学习项目中的一些小知识点。

2. 开发环境

win11 + VSCode(v1.11.9) + PyQt5 +Python(v3.13.12)

3. 在VSCode上配置PyQt5

关于这部分内容网上很多,下面是我随便搜到的,可作为配置部分的参考,项目创建部分我不太建议,具体后面再说。

手把手一起在VSCode上配置PyQt5_vscode pyqt-CSDN博客

4. 创建 PyQt5 新项目

4.1 创建工作区

创建文件夹,并命名,比如"helloPyQt5",打开VSCode,点击【打开文件夹】打开刚刚创建的文件夹。这部分操作相当于创建项目工作区,也就是这个文件夹相当于新项目的工作区。

当然,也可以先【新建文件】,再【将文件夹添加到工作区】。

4.2 新建新建main.py文件。

【新建文件】命名为main.py,可先添加程序运行入口。

复制代码
if __name__ == '__main__':
    print('hello')

4.3 创建 ui文件

在资源管理器项目目录空白处,右键菜单选择【PYQT:New Form】,即会弹出 Qt Designer 可以进行页面设计。设计完成后,命名保存。

4.4 编译ui文件

选中对应的ui文件,右键菜单选择【PYQT:Compile Form】进行编译,编译完成后会生成对应的py文件。

4.5 编辑页面逻辑

代码中调用生成的py文件的类,写入页面逻辑。调用ui的py文件,我见过三种写法,具体如下:

4.5.1 多继承 + python2 老式写法

super(Widget,self)属于python2的写法,告诉从Widget这个类的父类开始,调用父类的方法。

复制代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from Ui_widget import Ui_widget

class Widget(QWidget,Ui_widget):
    def __init__(self, parent = None):
        super(Widget,self).__init__(parent) 
        self.setupUi(self)

if __name__ == '__main__':
    app =  QApplication(sys.argv)
    
    widget = Widget()
    widget.show()
    sys.exit(app.exec())        

4.5.2 多继承 + Python3 的写法

和python2 区别就是super()的写法简化了。

复制代码
super().__init__(parent) 

4.5.3 PySide6 的写法(ui 与 业务逻辑分离)

都知道pyside6 和 pyqt5 写法几乎一致,我便尝试了这种写法,结果是可以的,而且我更喜欢这种写法,更符合之前的调用习惯,ui部分的控件函数联想也更方便(我现在用多继承的,只能到控件名,无法联想到对应控件的方法)

复制代码
class Widget(QWidget):
    def __init__(self, parent = None):
        super().__init__(parent)
        #以下不同 
        self.ui = Ui_widget()
        self.ui.setupUi(self)
        self.ui.label.setText('Hello World')

4.6 关于 Python中的程序运行入口

4.6.1 python 中的 main函数

在C++ 或 java 等语言中,都有特殊函数main 作为程序入口,但在python 中,main函数本身并不是语言内置的特殊函数,但通过与**name == "main"**配合使用,它成为‌推荐的程序入口点规范‌,广泛用于提高代码的可复用性和结构清晰度。

__name__‌ 是 Python 的内置变量,表示当前模块的名称。

  • 当模块‌直接运行‌时,name 的值为 "main"。
  • 当模块‌被导入‌时,name 的值为模块文件名(不含 .py)。

因此,以下代码块仅在脚本‌直接执行‌时运行,‌被导入时不执行‌:

复制代码
import sys

def main() -> int:
    print('hello')
    return 0

if __name__ == "__main__":
    sys.exit(main())

简化后的,就直接在*if name == 'main':*下写逻辑了。

4.6.2 PyQt5 必须要有QApplication + app.exec_()

执行代码中,涉及到Qt的,必须要有QApplication``,一般格式都是:

复制代码
if __name__ == '__main__':
    app =  QApplication(sys.argv)
    
    ...

    sys.exit(app.exec())     

4.7 程序执行

  • 点击运行按钮:在main.py页面点击其右上角的运行按钮,就会在此页面找程序入口,运行;

  • 输入命令行执行:在下方终端处输入执行命令,回车键,就会执行

5. 结束语

又开启Qt 的另一个领域了。

相关推荐
曲幽16 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码16 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱1 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵1 天前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio1 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663671 天前
使用 Python 从零创建 Word 文档
python
Csvn2 天前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽2 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户556918817532 天前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
兵慌码乱2 天前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2