iT邦幫忙

2025 iThome 鐵人賽

DAY 21
0
Software Development

軟體開發養成計畫:以小程式實作深化開發能力系列 第 21

[Day21]一週回顧 & Kivy 工具初探

  • 分享至 

  • xImage
  •  

1.第三週回顧

第三週回顧
這一週我總共寫了六篇文章:

  • 第十五天:讓程式與世界連線:API 串接與 JSON 處理攻略
  • 第十六天:用 Python 寫六個小程式:天氣查詢程式
  • 第十七天:分享JSON、XML、YAML資料交換三兄弟
  • 第十八天:用 Python 寫第七個小程式:單字測驗器
  • 第十九天:設計模式進階篇介紹:Factory 與 Observer 模式
  • 第二十天:用 Python 寫第八個小程式:記事提醒程式

這六天的文章中,一篇屬於技術性,兩篇屬於觀念性,三篇屬於程式實作。
在這週的學習裡,我最大的收穫是讓程式不再只是單機運作,而是能與外部世界產生連結。透過 API 串接,我第一次體會到只要善用網路資源,就能讓小程式立即具備即時資訊的能力,例如天氣查詢,就能馬上服務到日常生活。另一方面,資料格式的整理與比較(JSON、XML、YAML),也讓我理解到程式世界裡的溝通方式,背後其實都有一套標準。而在程式實作部分,單字測驗器讓我嘗試把學習需求轉化為小工具;記事提醒程式則結合了時間模組與互動設計,算是把日常生活的需求程式化,這讓我感受到實作的價值與樂趣。

如果第一週是強調「介面友善」,第二週是追求「專業化」,那麼第三週我認為主題就是「讓程式走向世界」。程式不再只是我電腦上的小工具,而是能跨平台、接觸到更多使用場景。因此,我想嘗試加入** Kivy 工具**,讓我的小程式能直接打包成手機 App。這樣一來,不論是記事提醒、單字測驗器,甚至是抽籤或井字遊戲,都不需要再透過電腦開啟,而是可以像一般 App 一樣安裝在手機上隨時使用。

2.Kivy小知識大解析

甚麼是Kivy?

Kivy 是一個開源的 Python 函式庫,它可以讓我們用 Python 程式語言來建立漂亮的應用程式介面,最大特點是:只要寫一次程式,就能在 Windows、macOS、Linux、Android、iOS 等不同平台上執行。
就像對於我來說,已經習慣使用 Python 開發小專案,而 Kivy 能幫助快速打包成手機 App,而不需要另外學 Java 或 Swift。

Kivy 工具特色

(1)用 Python 寫 App

可以直接用 Python 語言來開發應用程式的介面和功能,一切都用 Python 類別(Class)來組織。
範例:

# main.py
import kivy
from kivy.app import App
from kivy.uix.label import Label

class SimpleApp(App):
    def build(self):
        return Label(text='哈囉')

if __name__ == '__main__':
    SimpleApp().run()

(2) Kv 語言

它會將介面設計從 Python 程式碼中分離出來,就像網頁設計中的 HTML 和 CSS 一樣。
範例:
(Python 部分)

# myapp.py
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

class KvExampleApp(App):
    def build(self):
        return BoxLayout() 
    
    def button_pressed(self):
        print("按鈕被點擊了!")

if __name__ == '__main__':
    KvExampleApp().run()

(Kv 語言部分)

<BoxLayout>:
    orientation: 'vertical'  
    padding: 10              

    Button:
        text: '點擊我 (由 Kv 語言定義)'
        size_hint: (1, 0.3)  
        button_pressed 方法
        on_release: app.button_pressed()
  • 介面配置(按鈕文字、大小、位置)全部在 .kv 檔案中完成,Python 檔案只負責核心邏輯。

(3)多點觸控支援

這個特色通常不需要額外的程式碼來啟用,因為 Kivy 天生就支援了!
範例:

  • 畫圖 App: 想像一個繪圖 App。當兩個手指同時放在螢幕上時,Kivy 可以輕鬆區分這兩個不同的觸控點(Touch 事件),讓你用一個手指畫線,同時用另一個手指縮放畫布,或用兩指捏合來縮放。
  • 遊戲開發: 在手機遊戲中,可以同時用拇指按住移動方向鍵,並用食指點擊射擊按鈕。

原理是 Kivy 會自動將複雜的多點輸入轉換成簡單的事件,讓我們可以在程式碼中處理每一個獨立的觸控點。

(4)跨平台能力與容易打包

我們先擬定使用商業與效率角度去強調 Kivy 的優勢,更方便我們去整理出它的優勢面向:

面向 概念比喻 實際效益 Kivy 優勢
商業應用 「一次投資,多處收益」 不需為 Android / iOS 分別開發兩套程式 跨平台能力強,程式碼重複利用率高
效率提升 「寫一份企劃書,能同時投遞給多家公司」 節省開發與維護時間、人力成本 Python 語法簡潔,開發速度快
跨平台能力 「同一把鑰匙能開不同的門」 使用者可在電腦、手機、平板等裝置上體驗一致功能 支援 Windows、macOS、Linux、Android、iOS
容易打包 「把商品包裝好就能直接上架」 開發完成後可快速生成可安裝的 .apk 或 .ipa 有工具鏈(Buildozer、Xcode)可直接打包

tkinter 版 vs Kivy 版

由於我現在寫的小程式都是使用 tkinter 製作,因此想來比較看看兩者的差異:

項目 tkinter 版 Kivy 版
執行環境 只能在電腦(Windows / macOS / Linux)上跑 電腦可跑,也能打包成 Android / iOS App
介面設計 視窗元件偏桌面風格(適合鍵盤、滑鼠) 手機友善(觸控按鈕、滑動選單、動畫效果)
提醒方式 用 messagebox 彈窗提醒 可進階成手機推播通知(需搭配 plyer)
外觀 簡單、偏桌面軟體風格 可結合 KivyMD 做出接近手機原生 App 的設計
擴充性 難以整合手機硬體 能呼叫手機功能(相機、GPS、麥克風等)
發佈方式 只能打包成 .exe 給電腦用 可打包成 .apk(Android)或 .ipa(iOS)分享給朋友安裝

今天我從什麼是 Kivy、它的特色、以及商業與效率上的優勢來介紹這個工具。
對我來說,這就像是替我的小程式打開了一扇新大門──從原本只能在電腦上使用,逐漸邁向能在手機上操作。
之後來實際動手,把我做過的小程式改寫成 Kivy 版本,讓它真正能在手機上運行。就讓我們來期待一下吧~


上一篇
[ Day 20 ] 寫程式也能當鬧鐘?Python 記事提醒小實作
下一篇
[Day22]讓時間動起來:Python 的 datetime 與 schedule 入門
系列文
軟體開發養成計畫:以小程式實作深化開發能力25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言