Hello~ Internet!
這個系列的最後一篇來了呀! 在這一篇直接把所有第0篇影片中的應用程式功能做出來吧!
這次的UI介面檔案我一樣推薦直接去 github 下載喔!
我會一段一段的解釋 Code 然後再給大家看全貌!
如果還不理解 UI 設計與分離的文章的話,可以先看這一篇的介紹喔!
或是想先了解怎麼把 Matplotlib 嵌入 PyQt5 中的話推薦先去理解後再來看這篇喔!
那我們開始吧!
這篇會介紹到:
- 直接實戰!
直接實戰!
UI
首先,先介紹一下 UI 的部分吧!
我放置了很多的 Layout 來保持元素對齊,還用了另一個 Layout
QFormLayout
FormLayout 有一個特點就是,它每一列只能存放兩個元素,通常是放一個 Label 和一個輸入的元件。
這個我認為用來對其元件和管理元件真的很方便~
接著就是一個站畫面很大空間的 Widget。
畫面有一點點複雜,建議去 github 直接看原始設計喔~
Main.py
為了方便收集我們設定的資料( 像是公式的參數等等 )
我習慣使用 dict 來處理
至於繪圖種類我就拿 ComboBox 的順序當作種類的編號
0 => Sin 波
1 => Cos 波
然後事件部分,我是設定只要繪圖種類有更改的話都會重新繪圖一次
self.config = {} self.updateConfig() # 更新 Config 的 Function def updateConfig(self): self.config["f"] = float(self.f_input.text()) self.config["a"] = float(self.a_input.text()) self.config["theta"] = float(self.theta_input.text()) self.config["delta"] = float(self.delta_input.text()) # 繪圖種類更改的時候就重新繪圖一次 def change_Draw_Figure_Type(self, Value): self.canvasRenderer.changeDrawType(self.comboBox.currentIndex()) self.draw()
CanvasRenderer
繪圖部分並沒有太多的改變
就是繪圖種類改變實會重新繪圖
def changeDrawType(self, drawType): self.reset() if drawType == 0: self.DrawType = drawType self.fig.suptitle("Sin 正弦波", fontproperties=self.zhfont1) elif drawType == 1: self.DrawType = drawType self.fig.suptitle("Cos 餘弦波", fontproperties=self.zhfont1) def clearCanvas(self): # self.fig.clf() self.axes.clear() self.axes.grid(True) def reset(self): """讓 MainWindow 較好呼叫 回歸初始狀態""" if self.timer is not None: self.timer.stop() self.timer = None self.X = None self.Y = None self.updateTime = 0 self.axes.clear() self.axes.grid(True)
reset 部分就是把所有的變數都回歸 initial 的狀態~
那大致上整個程式就完成了~ 耶~~
大家可以下載下來跑跑看或是自己研究看看( 雖然不是多複雜的程式啦XD )
當然~這次也是一樣的~
完整程式碼我都放在 gtihub 上給大家直接下載喔~
在這裡 github ep7
結尾:
這次就是最後一篇啦~
不知道大家覺得會太簡單或是太困難呢?
我自己是覺得有點太多篇了(?)
有什麼想法歡迎留言跟我說喔!
下一次我還有一個跟深度學習有關的大計畫
會用到 Reinforce Learning 的計畫,到時候再上來發給大家囉~
不知道大家覺得這樣的系列文好不好 在下面留言告訴我喔
或是有什麼其他的想法都可以告訴我喔~
(不敢公開留言的話可以用 聯絡我 寄信跟我說喔~
那就先這樣啦!
我們下一篇見囉!
ㄅㄅ