Python 入門指南 5.0
單元 30 - GUI 的基本概念與 MVC 模式
大部分物件導向程式語言在開發 GUI 的部份會採取 MVC 模式 (Model-View-Controller) , M 是我們的 Encrypt 類別 (class) , V 為介面,而 C 為 M 與 V 之間的控制器
↑
M V C
↓ ↓
Encrypt EncryptController
依 MVC 模式,三個部分都是獨立開發的類別或檔案,在 Python 中就會放在不同的模組 (module) 中,這是說 M 是資料計算的核心類別,其為 Model 的頭字母縮寫, V 是介面類別, V 為 View 的頭字母縮寫, C 為控制 M 與 V 之間交流的類別, C 則是 Controller 的頭字母縮寫。
MVC 模式的目的是將軟體功能拆分成不同的部分,這樣的好處是將軟體分成不同單元,然後各自開發測試,最後再利用 MVC 的概念組合在一起。
我們在上一個單元已經介紹過設計 Tk 應用程式的步驟,以及套用三種版面管理員的 Tk 小程式,現在我們進一步來看 GUI 的基本架構,下面以 Tk 製作的軟體 Thonny 在 Windows 執行為例。
從上而下來看,第一個就是標題列
Tk 設定視窗標題是直接用 Tk 應用程式物件來設定,我們在上一個單元的三個 Tk 小程式已經示範過。
接下來是選單列
選單列的視窗元件為下拉式選單,主要用途是把整理軟體的所有功能,由於我們要製作的 GUI 軟體,所有的功能都已經放到七個按鈕中,因此沒有額外設計選單列。
下面則是工具列
Thonny 是用自訂的小圖片當按鈕,我們的 GUI 預計是用內建的按鈕,並套用內建的樣式,因此按下按鈕會出現內建的動畫效果,
然後下面是工作區
Thonny 的工作區是依據需要,由很多不同的視窗元件組成。
最底下向左對齊的是狀態列
狀態列是依需要來顯示文字訊息, Thonny 的狀態列顯示的是目前用的直譯器版本。
Thonny 是開放原始碼的軟體,因此可以到 Thonny 官網 https://thonny.org/ ,下載原始碼來查看這個利用 Tk 的開發例子。
至於我們預計做出如下圖的「編密碼小工具」
我們的「編密碼小工具」不會像 Thonny 那樣架構龐大,基本上是 Python 及 Tk 製作小工具的範例,下一個單元我們會介紹 Tk 有哪些視窗元件,以及選擇哪些視窗元件來製作 V 的部分。
中英文術語對照 | |
---|---|
MVC 模式 | Model-View-Controller |
類別 | class |
模組 | module |
重點整理 |
---|
1. MVC 為軟體工程把模型、介面及控制分開的發展模式, M 就是就是處理資料的類別, V 為使用者介面的類別, C 則是控制 M 與 V 交流的類別。 |
2. 一般 GUI 軟體從少而下會分成標題列、選單列、工具列、工作區,以及通常放在地底下的狀態列。 |
3. Thonny 是採用 Python Tk 製作的開放原始碼 GUI 軟體。 |
問題與討論 |
---|
1. 什麼是 MVC 模式?為什麼開發軟體要採用 MVC 模式? |
2. 什麼是開放原始碼軟體? |
3. 圖形介面有什麼優點及缺點? |
練習 |
---|
1. Python 直譯器提供的 IDLE 也是用 Tk 開發的軟體,打開 IDLE ,看看 IDLE 有什麼優點及缺點。 |
2. Eric 是另一款開放原始碼的 Python 整合開發環境,查看 Eric 的官網,比較跟 Thonny 的優劣。 |
3. Pitivi 為用 Python 開發的開放原始碼影片剪輯軟體,查看 Pitivi 的官網,看看 Pitivi 有什麼優點及缺點。 |
4. Pygame 為用 Python 開發的開放原始碼 2D 遊戲引擎,查看 Pygame 的官網,看看 Pygame 要如何上手。 |
5. Kivy 為用 Python 開發的開放原始碼使用者圖形介面,查看 Kivy 的官網,看看 Kivy 要如何上手。 |
6. PyChess 為用 Python 開發的開放原始碼西洋棋客戶端,查看 PyChess的官網,看看 PyChess 有什麼特點。 |
7. Django 為用 Python 開發的開放原始碼架站框架,查看 Django 的官網,看看 Django 要如何上手。 |
8. Flask 為用 Python 開發的開放原始碼架站框架,查看 Flask 的官網,看看 Flask 要如何上手。 |
9. Numpy 為用 Python 開發的開放原始碼科學計算程式庫,查看 Numpy 的官網,看看 Numpy 要如何上手。 |
10. BeautifulSoup 為用 Python 開發的開放原始碼解析標記語言文件程式庫,查看 BeautifulSoup 的官網,看看 BeautifulSoup 要如何上手。 |