python基於Kivy寫一個圖形桌面時鐘程序
Kivy 是一個開源的 Python 第三方庫,可以用來快速開發應用程序。
它有如下三個特點:
- 跨平臺
Kivy 編寫的程序可在 Linux,Windows,OS X,Android,iOS 和 Raspberry Pi 上運行。
- 商業友好
Kivy 基於 MIT 許可證進行開源,可以進行免費的商業使用。
- GPU 加速
Kivy 的圖像引擎基於 Open ES 2 構建,性能出眾。
除此之外 Kivy 也存在一些缺點,比如:
- 非原生的圖形界面;
- 打包後的體積很大;
- 缺乏社區支持;
- 缺乏足夠的示例文檔;
- 對中文的支持很差;
盡管 Kivy 有這樣的缺點,但也不失為一個優秀的 Python 圖形界面開發庫。尤其是其能夠將應用程序打包為移動設備(IOS 和安卓)可用的 APP,可以說極大地擴展瞭 Python 開發的邊界。
本篇文章,我們用 Kivy 寫一個桌面時鐘程序,來體驗一下 Kivy 的圖形界面開發。其最終效果如下圖所示:
本文所述程序的代碼結構如下圖所示:
其中:
- /font文件夾用於放置中文字體文件。在其中,我們放置瞭思源黑體作為圖形的中文顯示字體。
- /imgs文件夾用於放置靜態圖片文件,在其中,我們放置瞭兩個方向指示圖片。
- /kv文件夾用於存放 Kivy 界面的設計模板。
- main.kv是主程序的界面設計模板。
- main.py是主程序的 Python 代碼。
使用 kv 構建界面
Kivy 提供瞭一種簡單且可擴展的 GUI 設計語言用來專門設計對 Kivy 的圖形界面進行設計。我們可以在.kv文件中設計好程序的圖形界面,然後在.py文件中對圖像界面進行交互控制。
在本程序中,我們一共有 3 個地方使用瞭 Kivy 的設計語言,它們分別是:
- 時鐘屏幕:clockscreen.kv
- 秒表屏幕:stopwatchscreen.kv
- 主界面:main.kv
在時鐘屏幕中,我們按照如下方式定義構建瞭一個界面:
在秒表屏幕中,我們按照如下方式定義構建瞭一個界面:
最後在主界面中,引入這兩個屏幕,通過佈局管理器,將其放置在瞭主界面中:
編寫主程序代碼
在通過 Kivy 的kv設計語言構建好瞭程序界面之後,我們來編寫主程序的 Python 代碼。
首先,引入所需的模塊:
from kivy.app import App from kivy.uix.screenmanager import Screen,SlideTransition from kivy.core.text import LabelBase from kivy.uix.button import ButtonBehavior from kivy.uix.image import Image from kivy.clock import Clock import time
接著,配置一下中文字體。因為 Kivy 的先天缺陷,其對中文的支持很差勁,默認情況下,中文都會顯示成一個個豆腐塊,隻能通過引入中文字體來解決:
LabelBase.register( name='SiyuanHeiti', fn_regular='./font/SourceHanSansCN-Normal.ttf' )
然後,我們創建 3 個在kv文件中定義的小部件:
# 圖像按鈕 class ImageButton(ButtonBehavior,Image): pass # 秒表屏幕 class StopwatchScreen(Screen): pass # 時鐘屏幕 class ClockScreen(Screen): pass
創建一個名為MainApp()的類,這是程序的主類。我們把各種交互控制的方法寫在這裡面: class MainApp(App): sw_started = False # 秒表啟動狀態 sw_seconds = 0 # 當前秒表秒數 def update(self,n): # 如果秒表已啟動,更新當前秒數 if self.sw_started: self.sw_seconds += n # 更新當前時間 self.root.ids['clock_screen'].ids['time'].text = time.strftime("[b]%H[/b]:%M:%S") # 更新秒表 m,s = divmod(self.sw_seconds,60) # 返回一個包含商和餘數的元組 self.root.ids['stopwatch_screen'].ids['stopwatch'].text = ("%02d: %02d.[size=40]%02d[/size]" % (int(m),int(s),int(s*100%100))) # 重寫程序啟動的事件 def on_start(self): Clock.schedule_interval(self.update,0) # 開始/停止 def start_stop(self): self.root.ids['stopwatch_screen'].ids['start_stop'].text = '啟動' if self.sw_started else '停止' self.sw_started = not self.sw_started # 重置秒表 def reset(self): if self.sw_started: self.root.ids['stopwatch_screen'].ids['start_stop'].text = '啟動' self.sw_started = False self.sw_seconds = 0 def go_forward(self): screen_manager = self.root.ids['screen_manager'] screen_manager.transition = SlideTransition(direction="right") screen_manager.current = "stopwatch_screen" def go_back(self): screen_manager = self.root.ids['screen_manager'] screen_manager.transition = SlideTransition(direction="left") screen_manager.current = "clock_screen"
這樣,這個程序就完成瞭。我們實例化MainApp()並調用其run()方法即可運行。
if __name__ == '__main__': app = MainApp() app.run()
小結
總體而言,使用 Kivy 編寫圖形界面程序和使用其他 Python 圖像界面庫相比,沒有多大的區別。其通過kv設計語言,很大程序上把圖形程序的界面和交互分離開來,使得程序的開發比較清晰。
如果需要使用 Kivy 開發出精美且功能強大的圖形界面,還是得深入熟悉和瞭解 Kivy 的各類組件。
以上就是python基於Kivy 寫一個圖形桌面時鐘程序的詳細內容,更多關於python Kivy 寫一個桌面時鐘程序的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- Python pygame項目實戰英雄動畫特效實現
- Python遊戲開發之精靈和精靈組
- 基於Python實現人像雪景小程序
- Python+Pygame實戰之實現小蜜蜂歷險記遊戲
- 寫好Python代碼的幾條重要技巧