PyQt5 Signal / Slot 機制入門

利用 Qt Designer 設計好程式的介面以後,要如何讓程式有反應呢?這時候就得寫背後的邏輯了。 Qt 使用 Signal / Slot 機制來達到物件之間的通訊,就有點像是拿電線接起來一樣。例如將開關接上燈泡後,按下開關就會亮,而將連結斷開後,燈泡就不會對按鈕有反應了。 不知道怎麼安裝可以先看這篇 安裝PyQt5 + 連動Pycharm ![012](https://jimmylab-images.seisblue.com/uploads/2018/07/012.png) 現在我們先設計一個簡易的加法器如下,物件名稱需更改以利辨識 ![02_1](https://jimmylab-images.seisblue.com/uploads/2018/07/02_1.png) Qt Designer 右下角有個 Signal/Slot Editor,先按 + 產生一組訊號連結 在 Sender 欄可以選發送訊號的物件,Signal 欄可以選擇觸發條件,Receiver 欄可以選擇接收訊號的物件,Slot 可以選擇執行的動作 ![02_2](https://jimmylab-images.seisblue.com/uploads/2018/07/02_2.png) 我們希望按下 Clear 按鈕後,三個 lineEdit 框可以被清空,所以設定當 pushButton\_clear 被 clicked() 的時候,lineEdit\_A 要 clear() 自己的資料 ![02_3](https://jimmylab-images.seisblue.com/uploads/2018/07/02_3.png) 剩下 lineEdit\_B 與 lineEdit\_ANS 都比照辦理 現在將圖形介面存檔成adder.ui,並利用 PyUIC 將 adder.ui 轉換成 adder.py 另外寫一個 call_adder.py 來啟動程式: <pre class="brush: python; title: ; notranslate" title=""> import sys from PyQt5.QtWidgets import QMainWindow, QApplication from adder import * class AdderMainWindow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super(AdderMainWindow, self)....

<span title='2018-07-12 23:16:43 +0800 +0800'>July 12, 2018</span>&nbsp;·&nbsp;1 分鐘&nbsp;·&nbsp;Jimmy

安裝PyQt5 + 連動Pycharm

如果要在 Python 上面寫 GUI 介面,推薦跨平台跨語言的Qt,它有 App Designer 可以直接排版後自動生成程式碼。用 signal / slot 作為物件之間的溝通,簡化了很多開發上的複雜度。Qt 底層為 C++ ,所以執行速度較快。PyQt5 只支援 Python 3 ,且不向下支援 PyQt4。 Pycharm 算是個人蠻推薦的 Python IDE,有強大的除錯功能,可以自動整理程式碼,並可以與許多工具結合,比用單純的文字編輯器好很多。 以下專注在 Windows 10,Pycharm 灌好的前提下,如何安裝 PyQt5 並連動: 打開 Settings ![011](https://jimmylab-images.seisblue.com/uploads/2018/07/011.png) 2. 找到 Project Interpreter 並按 + (有 Anaconda 的要先按綠色圈圈取消) ![021](https://jimmylab-images.seisblue.com/uploads/2018/07/021.png) 3. 在上方搜尋 PyQt5 並安裝 PyQt5 與 pyqt5-tools ![031](https://jimmylab-images.seisblue.com/uploads/2018/07/031.png) 4. 回到 Settings 找到 External Tools 並按 + ![041](https://jimmylab-images.seisblue.com/uploads/2018/07/041.png) 5. 設定 Qt Designer 如圖,找到 designer.exe (通常在 Python 根目錄下的 Lib/site-package/pyqt5-tools 裡面),Arguments 設定為`$FileName$`,Working directory 設定為`$ProjectFileDir$`,可以用 Insert Macro 裡面找 ProjetFileDir 生成!...

<span title='2018-07-09 15:53:55 +0800 +0800'>July 9, 2018</span>&nbsp;·&nbsp;1 分鐘&nbsp;·&nbsp;Jimmy