0.1 使用 vscode 从零开始学习 PyQt5

从零开始学习的前提是对 Python 有一定的基础。(本文是 win10 的环境,另外已经安装了 Anaconda)

我们先看看如何安装吧?

pip install PyQt5 pyqt5-tools

这么简单?对的 ,你没有看错,一个命令足以。该命令会帮我们安装好 PyQt5 及其辅助工具。为了方便学习和使用,我们先研究 designer。启动 designer 是很容易的,只需要在 PowerShell 中输入:

designer

便会弹出如下界面:

designer

制作程序 UI 界面,一般可以通过 UI 制作工具和纯代码编写两种方式来实现。在 PyQt5 中,也可以采用这两种方式。这一章主要讲解通过 Qt Designer 工具来制作 UI 界面。

Qt Designer,即 Qt 设计师,是一个强大、灵活的可视化 GUI 设计工具,可以帮助我们加快开发 PyQt5 程序的速度。Qt Designer 是专门用来制作 PyQt5 程序中UI界面的工具,它生成的 UI 界面是一个后缀为 .ui 的文件。该文件使用起来非常简单,可以通过命令将 .ui 文件转换成 .py 格式的文件,并被其他 Python 文件引用;也可以通过 CMD 进行手工转换。

Qt Designer 符合 MVC(模型—视图—控制器)设计模式,做到了可视化和业务逻辑的分离。Qt Designer具有以下优点:

  • 使用简单,通过拖曳和点击就可以完成复杂的界面设计,而且还可以随时预览查看效果图。
  • 转换 Python 文件方便。Qt Designer 可以将设计好的用户界面保存为 .ui 文件,其实是 XML 格式的文本文件。为了在 PyQt5 中使用 .ui 文件,可以通过 pyuic5 命令将 .ui 文件转换为 .py 文件,然后将 .py 文件引入到自定义的 Python 代码中。

利用 VSCode 学习 PyQt5

首先,使用 vscode 创建一个工作区:GUI.code-workspace,然后打开终端,并创建 qt5 目录:

vscode

为了方便代码的管理,我们使用 git 进行管理。先设计 .gitignore 文件:

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/

# vscode & vs
.vs
.vscode

# office & pdf
*.doc
*.docx
*.pdf

# data
data/
draft/
Untitled.*

下面直接初始化仓库:

$ git init
$ git add .
$ git commit -m "start qt5 projects"

为了更好的管理,下面使用 git flow

$ git flow init
$ git flow feature start designer

在 develop 分支下创建 feature/designer 用来管理第一个 GUI 项目。接着,我们在终端打开 designer:

vscode 打开 designer

在打开的 designer 界面,选择 Main Window

start

下面先创建一个按钮:

Push Button
  1. 先用鼠标拖动 1 到窗口的空白位置 2,接着点击 3 保存文件为 button.ui
  2. 修改按钮名称为 关闭,接着打开 Edit 选中 编辑信号/槽
button + action
  1. 使用鼠标左键拖动按钮 关闭 到某一位置然后释放鼠标,弹出如下界面:

再依次选中 clicked()close()OK,便得到视图如下:

  1. 关掉 designer 窗口,重新回到 vscode 的终端,并输入:
pyuic5 button.ui -o button.py

button.ui 转换为 button.py 方便后续代码的调试。启动这个 python 文件,我们需要编写 main.py

import sys
import button
from PyQt5.QtWidgets import QApplication, QMainWindow

if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = button.Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

然后再终端输入:

$ python main.py

便得到如下结果:

点击 关闭 则会关闭该 UI。这里还有一个问题需要注意,上图的 UI 的标题是 MainWindow,它不能很好的说明我们要表达的 UI 的含义,最好重新起一个名字。

b( ̄▽ ̄)d 修改窗口的标题是很简单的,这里我们有 3 种方法:

  • 直接在 vscode 中修改 button.py 中画圈的部分,然后重新显现 UI 即可:
    修改 `button.py`
  • 直接在 vscode 中修改 button.ui 中画圈的部分,接着使用 pyuic5 重新生成 button.py 最后重新显现 UI 即可
    修改 `button.ui`
  • 使用 designer 打开 button.ui ,修改下图画圈的部分:
    修改designer

直接载入 .ui 文件

也可以不用使用 pyuic5 转换 .ui 文件为 .py 文件,直接载入。下面直接编写 main.py 文件为:

import sys
from PyQt5.uic import loadUi  # from PySide2.QtUiTools import QUiLoader
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QFile, QIODevice

if __name__ == "__main__":
    app = QApplication(sys.argv)

    ui_file_name = "button.ui"
    ui_file = QFile(ui_file_name)
    if not ui_file.open(QIODevice.ReadOnly):
        print(f"Cannot open {ui_file_name}: {ui_file.errorString()}")
        sys.exit(-1)
    window = loadUi(ui_file)
    ui_file.close()
    if not window:
        #print(loader.errorString())
        sys.exit(-1)
    window.show()
    sys.exit(app.exec_())

效果和之前的使用 pyuic5 转换后的效果是一样的。

学习内容先到此结束,下次将分享更加复杂的 UI 设计以及如何打包为 .exe 文件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容