# 【分享】一招教你快速開發GUI桌面軟體（全平臺）

**URL:** https://forum.amebaiot.com/t/gui/618
**Category:** General
**Created:** [June 25, 2021, 10:23am UTC](https://forum.amebaiot.com/t/gui/618 "2021-06-25T10:23:10Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![xidameng](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/xidameng/32/18_2.png) [@xidameng](https://forum.amebaiot.com/u/xidameng)
#### Post date: [June 25, 2021, 10:23am UTC](https://forum.amebaiot.com/t/gui/618/1 "2021-06-25T10:23:10Z")

</div>

作爲軟體工程師，經常要和使用不同OS平臺的客戶打交道，經常客戶的需求只需要一些簡單的操作就可以完成，但是客戶不是工程師，對於任何需要使用“黑框框”的界面都感到頭大，想要解決這個問題就要開發桌面的 **GUI** (Graphical User Interface) 軟體，這樣就把簡單的事情一下變得很複雜，那麽有沒有什麽辦法可以輕鬆開發桌面GUI軟體呢？

有！ 接下來就給大家demo一個我最近學會的方法。

## 軟體工具清單

- Python3
- pyinstaller

## 1. 用Python的Tkinter開發GUI軟體

Python自帶Tkinter的模塊可以輕鬆開發GUI桌面軟體，加上Python簡單易讀的特性，以及豐富的綫上教程，開發一個好用的GUI桌面軟體可能只需要一兩百行程式碼就夠了，比起Qt動不動要安裝很多工具，使用Python的Tkinter實在是很方便。

> 想要瞭解更多Tkinter的使用方法可以查看[這裏](https://docs.python.org/3/library/tkinter.html)

這裏我們以一個最常用的串口監視器爲例，看看一個用Python寫的自製GUI串口監控器需要怎樣的代碼量：

> <https://github.com/summerccc/Python_serial_debug/blob/master/serialDebug/MainSerial.py>

> <https://github.com/summerccc/Python_serial_debug/blob/master/serialDebug/SerialClass.py>

兩個Python檔加起來只需要 **270** 行程式碼，算是很小的了。有興趣的朋友可以從這個github上把源碼clone下來，用Python執行一下看看(需要用pip安裝[pyserial](https://pypi.org/project/pyserial/)模組)，效果還是很好的，

 ![image](https://us1.discourse-cdn.com/flex016/uploads/ameba/original/1X/1ff500c2cb3ba284e3b984a96b1600ec090e95f7.png)

  

現在問題來了，雖然你可以在自己的筆電上運行這個程式，但這是因爲你已經安裝好了Python開發環境，并且也安裝好了必須的Python模組，但很有可能客戶的電腦上并沒有Python，更沒有這些必須的模組，這該怎麽辦？ 別着急，接下來介紹給你一個超好用的工具—— **pyinstaller**

## 2. 使用pyinstaller來發佈全平臺桌面軟體

這裏的全平臺就是指 **Windows, Linux 還有 MacOS** ， 但實際上pyinstaller還支援 AIX, Solaris, FreeBSD and OpenBSD！

往常需要發佈全平臺桌面軟體的話，一定要藉助很多工具，現在只需要一個pyinstaller就夠了，安裝pyinstaller的方法也很簡單，直接使用pip就好，

```bash
pip install pyinstaller

```

（以下以Windows10爲例）  
安裝完成之後，就可以找到你存放你的Python GUI程式的程式碼的地方，在地址欄輸入以下指令+回車：

```bash
cmd

```

然後你就會看到window的command prompt從當前路徑跳出來，

 ![image](https://us1.discourse-cdn.com/flex016/uploads/ameba/original/1X/f069c27e0f5d149f02a3c2707dacaaf787c32e6b.png)

接下來，你只需要輸入一行指令就可以了，

```bash
pyinstaller -w --onefile [你的Python檔的名字]

```

**Done！** 🎊

這樣你就能在當前資料夾下的 `dist` 資料夾中找到適用于你的OS的應用程式了，而且這個程式可以在任意一臺別的Windows電腦上運行，不需要安裝任何東西！（此方法也適用於別的所有OS）

 ![image](https://us1.discourse-cdn.com/flex016/uploads/ameba/original/1X/50a0e73b0d545b58fb4f7bd180a46b0a022d2f8c.jpeg)

  

## 結語

有人肯定會問：“爲什麽不用Qt開發GUI程式？C語言+Qt不香嗎？”

我的回答是：

> 人生苦短，我用Python

😆

---

<div class="post-metadata">

### Author: ![Alphi\_Jiang](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/alphi_jiang/32/379_2.png) [@Alphi\_Jiang](https://forum.amebaiot.com/u/Alphi_Jiang)
#### Post date: [June 28, 2021, 7:48am UTC](https://forum.amebaiot.com/t/gui/618/2 "2021-06-28T07:48:13Z")

</div>

我都用Qt 居多, 不過python 的確套件 超多.很多東西如果不影響效率如USB 部分我都改用python 去做  
給某些客戶的量產工具也是用python

---

<div class="post-metadata">

### Author: ![xidameng](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/xidameng/32/18_2.png) [@xidameng](https://forum.amebaiot.com/u/xidameng)
#### Post date: [June 29, 2021, 3:10am UTC](https://forum.amebaiot.com/t/gui/618/3 "2021-06-29T03:10:32Z")

</div>

人生苦短，我用python😄

---

<div class="post-metadata">

### Author: ![aymf0531](https://avatars.discourse-cdn.com/v4/letter/a/c77e96/32.png) [@aymf0531](https://forum.amebaiot.com/u/aymf0531)
#### Post date: [July 7, 2021, 8:19am UTC](https://forum.amebaiot.com/t/gui/618/4 "2021-07-07T08:19:19Z")

</div>

谢谢分享！实用！  
请问你们觉得Tkinter和Pyqt哪一个比较好用呢？

---

<div class="post-metadata">

### Author: ![xidameng](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/xidameng/32/18_2.png) [@xidameng](https://forum.amebaiot.com/u/xidameng)
#### Post date: [July 7, 2021, 10:04am UTC](https://forum.amebaiot.com/t/gui/618/5 "2021-07-07T10:04:10Z")

</div>

> [@aymf0531](#):
>
> 请问你们觉得Tkinter和Pyqt哪一个比较好用呢？

如果説快速、小巧、步驟少的話，一定是Tkinter  
如果説直觀、方便、功能多的話，那就是PyQT

---

<div class="post-metadata">

### Author: ![Alphi\_Jiang](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/alphi_jiang/32/379_2.png) [@Alphi\_Jiang](https://forum.amebaiot.com/u/Alphi_Jiang)
#### Post date: [July 13, 2021, 5:18am UTC](https://forum.amebaiot.com/t/gui/618/6 "2021-07-13T05:18:49Z")

</div>

pyQT 採用GPL 在商業上有其疑慮, 而另一套PySide2 採用LGPL 比較適合商業

---

<div class="post-metadata">

### Author: ![xidameng](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/xidameng/32/18_2.png) [@xidameng](https://forum.amebaiot.com/u/xidameng)
#### Post date: [July 13, 2021, 6:09am UTC](https://forum.amebaiot.com/t/gui/618/7 "2021-07-13T06:09:47Z")

</div>

我也發現了，Pyside2好像挺有意思的，都是同一家公司出的，似乎自己挖自己的墻角？

---

<div class="post-metadata">

### Author: ![Alphi\_Jiang](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.amebaiot.com/alphi_jiang/32/379_2.png) [@Alphi\_Jiang](https://forum.amebaiot.com/u/Alphi_Jiang)
#### Post date: [July 13, 2021, 8:14am UTC](https://forum.amebaiot.com/t/gui/618/8 "2021-07-13T08:14:37Z")

</div>

因為商業考量 當初PyQT 跟QT Trolltech 有故事 你可以查一下 八卦
