使用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 的另一个领域了。

相关推荐
70asunflower1 小时前
6.1 图表选择指南
python·信息可视化·数据挖掘·数据分析
次元工程师!1 小时前
LangFlow开发(一)—安装和部署
git·python·大模型·langflow
deephub1 小时前
Feature Engineering 实战:Pandas + Scikit-learn的机器学习特征工程的完整代码示例
人工智能·python·机器学习·pandas·scikit-learn
code_pgf1 小时前
Python `asyncio` 与 C++ Fiber 的原理与逻辑分析
c++·人工智能·python
张二娃同学1 小时前
第03篇_CNN图像识别入门
人工智能·python·神经网络·cnn
会开花的二叉树2 小时前
从 C++ 转向 AI 应用工程:我的 Python 基础第一阶段复盘
c++·人工智能·python
AI玫瑰助手2 小时前
Python流程控制:while循环嵌套与死循环避免技巧
开发语言·python·信息可视化
IT策士2 小时前
Python 中间件系列:消息队列 RabbitMQ 操作
python·中间件·rabbitmq
一起逃去看海吧2 小时前
Function Calling
python