【没钱买ps,PyQt自己写】Day 1 - 安装 PyQt,建立自己的第一支 PyQt5 程序

前言

今年算是拖到最後一天最後一刻才开赛...
因为疫情的关系今年实在有点忙不过来,
因此早在两个月前就先为此做了提前准备的计画,
既然要写就要如期完赛,如果直接开赛可能撑个没几天就因忙碌而断赛就太可惜了。
因此有些屯了一点点文章(不过其实也不算多...),
希望在这段忙到爆炸的时间还是能够给读者们完整的30天系列。

PyQt是使用python写出来的视觉化界面(GUI)程序,
会结合我去年的【钱不够买ps的我,只好用OpenCV来修图了!】结合两项技术,
今年看能够自己干出一个 photoshop 做到什麽程度XDD
(还是我目标放太远,应该先做个小画家之类的XDDD)

看完这篇文章你会得到的成果图

https://ithelp.ithome.com.tw/upload/images/20210916/20120424ZG022kMLAT.png

这次是我初学 PyQt5 的一些笔记,
每天都学一点点,至於整理的部分就慢慢一个个来
毕竟知道 PyQt5 有很多东西XD

此篇文章的范例程序码 github

https://github.com/howarder3/ironman2021_PyQt5_photoshop/tree/main/day01_install_and_hello

安装

先安装 PyQt5

新的方法 (之後到 OpenCV 章节时,可避免一些问题):

建议使用 conda 的方式安装,

打开终端机的对应 conda 环境输入

conda install pyqt 

旧的方法 (之後可能会有些问题)

打开终端机输入

pip install PyQt5

至於前面步骤「可能」还有:

  • 安装 python
  • 安装 anaconda (optional,看你想不想要管理 python 环境)

这部分就先不多说明,网路已经很多好文章了!

范例程序码

PyQt5 可以学习的东西太多了! 我一开始学也是超级混乱的!!!
所以我们慢慢来!
先什麽都不管,直接跑程序码,至少我们要确认「有没有安装成功」!

复制以下程序码,直接跑就对了

应该要「能正常执行」,不然就是你没安装成功 PyQt5

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot

def window():
   app = QApplication(sys.argv)
   widget = QWidget()

   textLabel = QLabel(widget)
   textLabel.setText("Hello World!")
   textLabel.move(110,85)

   widget.setGeometry(50,50,320,200)
   widget.setWindowTitle("PyQt5 Example")
   widget.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   window()

执行

到这边相信大家都懂了XD,就一如往常的执行这份 python 吧!
(档名请自行更换)

python hello.py

结果

  • windows 版本

https://ithelp.ithome.com.tw/upload/images/20210916/20120424ZG022kMLAT.png

不论是任何版本,复制上面程序码应该都要看到这个结果,
不然请再去检查你的 PyQt5 为何没有安装成功!
(没安装成功的原因太多种了,这边很难细述)

说明

之後还会有更详细的说明,但是既然这边都提到了还是要交代一下!

如果想看更详细的说明,这边可以先跳过,日後文章会再来细讲

建立一个视窗应用,并且宣告一个 QWidget 物件

这边基本上写法不太会改

  • app 代表「系统」的视窗程序,
  • widger 代表一个 QWidget() 的物件 (我们开发的视窗)
app = QApplication(sys.argv)
widget = QWidget()

在 widget 新增一个文字物件

这边我们使用的是 QLabel,之後会在细讲这东西,
我们将这东西存入 textLabel 这个变数中,并且作了文字与位置的设定

textLabel = QLabel(widget)
textLabel.setText("Hello World!")
textLabel.move(110,85)

在 widget 设定视窗大小,设定标题名称,并显示於画面上

这边就是如何设定我们的 QWidget 视窗,

  • setGeometry 可以决定视窗大小
  • setWindowTitle 可以决定视窗名称
  • show 将视窗显示
widget.setGeometry(50,50,320,200)
widget.setWindowTitle("PyQt5 Example")
widget.show()

结束视窗应用

这边是在侦测使用者呼叫的视窗是否有被关闭,
就是我们一般视窗「右上角(windows) 的叉叉」,侦测到关闭程序後,
让程序顺利结束运行,如果没有这行就等於程序直接结束,
也不会等使用者把视窗关闭XD

sys.exit(app.exec_())

小结

到这边,看起来很简单(吗?),不过这就是我们初探 PyQt5 的第一步罗!
(到这边,距离大致掌握 PyQt5 还好遥远... 太多东西要学了)

Reference


★ 本文也同步发於我的个人网站(会有内容目录与显示各个小节,阅读起来更流畅):【PyQt5】Day 1 – 安装 PyQt,建立自己的第一支 PyQt5 程序


<<:  Day 1 - 写「好」程序是什麽样的感觉?

>>:  Day16 Laravel - migrate

Unity自主学习(八):Unity Hub授权Unity引擎

昨天我们都安装好Unity引擎,架设好可以编译程序的环境之後 打开"Unity Hub&q...

使用PPT写代码开发弹幕射击游戏

制作了一个使用PPT开发游戏的教学影片 Part 1: https://www.youtube.c...

关於交换器SFP用途

请问各位先进,最近公司刚买了台交换器,一直不懂上面的sfp垖的主要用途及好处在那?是要用在特别的环境...

前端工程师也能开发全端网页:挑战 30 天用 React 加上 Firebase 打造社群网站|Day26 根据主题筛选文章列表

连续 30 天不中断每天上传一支教学影片,教你如何用 React 加上 Firebase 打造社群...

Day 27:开始撰写 Playbook

今天努力了一个下午,终於算是勉强搞出了一组能动的 playbook,这边就来记录一下过程以及就我所知...