2020年3月5日 星期四

Python pyqt5 與 matplotlib 結合示範之範例1

對於寫 python 的人來說,為了讓程式更方便使用,會想要寫點圖形化介面。

對於 python 來說,最基本的圖形化介面是 tkinter ,網路上也有許多相關教學。不過用程式碼去定義視窗與物件排版,是需要比較學習與辛苦的。

之前我寫過 c# ,用 visual studio 去寫。按鈕、標籤可以直接拖曳到版面上,效率是比較高的,也易懂執行出來的成果會長怎樣。

對於 python 來說,有 qt 可以直接設計界面的,用 qt designer 也生成一個版面,將按鈕、標籤等拖曳到版面中排版,基本樣貌可以直接反應出來。

想要學習 pyqt ,建議直接找書,按部就班,基本上就能學習到讓 python + pyqt 搭配 qt designer 設計。

寫這範例,並不是手把手從零教學,而是展示一些搭配的效果。適合給初學者想再進階的人。

像是將 matplotlib 的繪圖鑲入,並且可以用qt物件去操控繪圖。

如果想要寫股票走勢,用選單選取股票,就能讓繪圖區跑出折線圖或K線圖,甚至可以做即時走勢,如果有辦法弄到即時資料就絕對可以。



以下是範例1:程式碼(github) 、 展示(youtube)

敘述:

有一個介面,繪圖區有兩條sin線,第一條為 sin(x)*2,第二條為 sin(x)*-1,兩條線在不同的軸上。看起來兩條線對稱於 y=0,但實際上兩條線的y值並沒有,兩條線分處的軸上的y軸範圍是不同的。

介面上有按鈕,可以控制 qtimer,qtimer每跑過一個intetval,兩條線就會新增一個值。所以按下 start按鈕,就可以看到兩條線動起來。而按下 stop按鈕,就可以停住qtimer。

介面有一條scrollbar,可以移動圖表X軸範圍,可以看舊的資料,也可以看新的資料。
也有 +按鈕 與  -按鈕 ,可以改變範圍寬度,最短 1 最長 30。

有一個追蹤最新的qcheckbox,勾選後,會以最新資料的x為範圍上限。如果開啟qtimer時有勾選,就可以保持在圖表能顯示最新資料。

滑鼠在圖表區,可以查詢線名、所在軸名、x值與y值。

滑鼠在圖表區,會有一條水平虛線輔助線追蹤滑鼠位置,可以按下 顯示輔助線 切換。
(這代表能夠讓使用者選擇想要顯示甚麼線在圖上)