Jason 去年有做一個 AI 競賽,題目要求程式要運行在凌華科技 ADLINK 的智慧相機 NEON上,並用他們提供的 EVA SDK 做開發, 其實 ADLINK NEON 說穿了就是一塊 NVIDIA Jetson 加上 Basler 的相機並把它們 Housing 在一起,軟體面的話裡面 OS 裝的是 Ubuntu 18.04 (for Jetson),並提供 EVA SDK 方便給你做開發。如果你不想用他們的 EVA SDK 的話,把這東西直接當作 NVIDIA Jetson 來操作也可以,不過這都不是今天的重點拉啦~ 今天要講的明明就是 PyQt 其他的再扯就太遠了 >"< Anyway, 除了AI的部分之外,他們還要求要有一個用來設定 UART( Serial Port ) 及通訊並帶有 UI 的小程式給他們,平常在 Windows 底下開發 UI 都是用 C# WPF 來做,換到 Ubuntu 上 C# WPF 自然而然的就烙賽了,然後 AI 那邊的程式是用 Python 來實作的,就想說這部分也用 Python 來寫UI,於是就有了這一篇xD 來介紹一下 PyQt Qt 是一個跨平台的C++應用程式開發框架,廣泛用於開發GUI程式。當然不只C++啦~ 通過語言綁定,其他的程式語言也可以使用Qt,像是我們今天要用的 Python。那麼接下來,首先是安裝:
到這邊假設上面的東西你都裝好了,那接下來你就可以開始設計你的UI了!
首先,打開 Qt Designer 應該會跳出選擇 New Form 的畫面(如下)。
預設的這些 Templates 呢基本上它們繼承了不同的Class,其用途也不太一樣。
一般選「Main Window」這一個就可以了~(名子很直觀,就是程式開起來時你GUI的主畫面。) 然後你就可以開始設計你的 UI 了! 如果你有使用類似工具設計UI 的經驗,那 Qt Designer 對你來說使用上應該是很直覺的~ 假設你的 UI 都設計好了、都畫好了(我這邊隨邊拉一個Button跟Label用來Demo一下),按下存檔它會存成一個副檔名為ui的檔案。
這份 .ui檔裡面就儲存了我們剛剛設計UI的所有資訊了,如果這時候你隨便用一個文字編輯器打開它,那你就會發現其實它裡面也是用了標準的 xml format 在儲存這些資訊。(484有一種似曾相似的味道)
有這份 .ui檔後,我們就可以配合前面已經裝好的PyQt5把它轉成可以運作的 Python Code。
command line cd 到你存放 demo.ui 的那層資料匣目錄底下,然後使用下面這個指令轉檔:
轉好的 Python Code 長得像這個樣子:
可以看出來程式的架構還蠻簡單的,基本上就是利用 .ui檔裡面寫的資訊幫你建了一個 Ui_MainWindow 的 Class,底下程式的進入點就只是幫你把它 New 起來而已。它這樣就能跑了 ( 直接下 python demo_ui.py )
但是事情到這還沒完呢。 不論你打算用MVC還是MVVM的架構來做開發,這邊頂多算完成View的部分,你後面一定還要再寫一些流程控制或者去串接一些功能。如果你直接在這一個 demo_ui.py 上做修改,去寫那一些程式,那麼不出意外的話,就會出意外了xD 你可能發現 UI 有哪邊你不太滿意,要改一下,然後你就用 Qt Designer 改阿改,接著要轉到 Python Code 的時候,你就會發現麻煩的地方了~ ( 別跟我說啥你有 git 要 merge 也很快 ) 比較推薦的做法還是: 流程控制的程式還是寫在自己的主程式裡,再把 UI 的 Class import 近來就好,範例如下:
demo_main.py
寫到這邊比較基本的應該就介紹完了,架構有了。接下來可能就是一些功能串接的部分,e.g. 怎麼在主程式裡接收 button click 事件、display a message/image on UI 等等的,這部分可以做到哪再google到哪,應該會比較快,或者你 tab 按一按看有沒有喜翻的 method 跑出來xD 不然這個真的要寫,應該是蠻囉嗦的吧~
好啦~ 我承認是我懶 >"< Ok, 那今天這篇就先寫到這邊吧~ 反正也就只是先入門介紹一下嘛 :")
1 評論
abola
4/2/2024 11:20:00
很通俗易懂的博客,看完大概就能上手了,原来qt也可以用python。
回覆
發表回覆。 |
Jason Chen人不光是生來就擁有一切,而是靠他從學習中得到的一切來造就自己。- 歌德 文章分類
全部
封存檔
九月 2023
|