
- Kivy 教程
- Kivy - 首頁
- Kivy 基礎
- Kivy - 入門
- Kivy - 安裝
- Kivy - 架構
- Kivy - 檔案語法
- Kivy - 應用程式
- Kivy - Hello World
- Kivy - 應用程式生命週期
- Kivy - 事件
- Kivy - 屬性
- Kivy - 輸入
- Kivy - 行為
- Kivy 按鈕
- Kivy - 按鈕
- Kivy - 按鈕事件
- Kivy - 按鈕顏色
- Kivy - 按鈕大小
- Kivy - 按鈕位置
- Kivy - 圓形按鈕
- Kivy - 停用按鈕
- Kivy - 圖片按鈕
- Kivy 小部件
- Kivy - 小部件
- Kivy - 標籤
- Kivy - 文字輸入
- Kivy - 畫布
- Kivy - 線
- Kivy - 複選框
- Kivy - 下拉列表
- Kivy - 視窗
- Kivy - 滾動檢視
- Kivy - 輪播
- Kivy - 滑塊
- Kivy - 圖片
- Kivy - 彈出視窗
- Kivy - 開關
- Kivy - 微調器
- Kivy - 分隔器
- Kivy - 進度條
- Kivy - 氣泡
- Kivy - 標籤頁面板
- Kivy - 散點圖
- Kivy - 手風琴
- Kivy - 檔案選擇器
- Kivy - 顏色選擇器
- Kivy - 程式碼輸入
- Kivy - 模態檢視
- Kivy - 切換按鈕
- Kivy - 攝像頭
- Kivy - 樹檢視
- Kivy - reStructuredText
- Kivy - 操作欄
- Kivy - 媒體播放器
- Kivy - 模板檢視
- Kivy - 虛擬鍵盤
- Kivy - 觸控漣漪
- Kivy - 音訊
- Kivy - 影片
- Kivy - 拼寫檢查
- Kivy - 效果
- Kivy - 輸入錄製器
- Kivy - OpenGL
- Kivy - 文字
- Kivy - 文字標記
- Kivy - 設定
- Kivy 佈局
- Kivy - 佈局
- Kivy - 浮動佈局
- Kivy - 網格佈局
- Kivy - 箱式佈局
- Kivy - 堆疊佈局
- Kivy - 錨點佈局
- Kivy - 相對佈局
- Kivy - 頁面佈局
- Kivy - 迴圈佈局
- Kivy - 佈局巢狀
- Kivy 高階概念
- Kivy - 配置物件
- Kivy - 圖集
- Kivy - 資料載入器
- Kivy - 快取管理器
- Kivy - 控制檯
- Kivy - 動畫
- Kivy - 多筆畫
- Kivy - 時鐘
- Kivy - SVG
- Kivy - UrlRequest
- Kivy - 剪貼簿
- Kivy - 工廠
- Kivy - 手勢
- Kivy - 語言
- Kivy - 圖形
- Kivy - 繪製
- Kivy - 打包
- Kivy - 花園
- Kivy - 儲存
- Kivy - 向量
- Kivy - 工具
- Kivy - 檢查器
- Kivy - 工具
- Kivy - 日誌記錄器
- Kivy - 幀緩衝區
- Kivy 應用程式和專案
- Kivy - 繪圖應用程式
- Kivy - 計算器應用程式
- Kivy - 計時器應用程式
- Kivy - 攝像頭處理
- Kivy - 圖片檢視器
- Kivy - 貝塞爾曲線
- Kivy - 畫布壓力測試
- Kivy - 圓形繪製
- Kivy - 小部件動畫
- Kivy - 其他
- Kivy 有用資源
- Kivy - 快速指南
- Kivy - 有用資源
- Kivy - 討論
Kivy - 時鐘
Kivy 框架中的 Clock 物件是一個全域性事件排程器。它用於在特定時間間隔安排和觸發事件。要安排重複或一次性發生的事件,它會繫結到一個回撥函式。您可以透過“dt”引數獲取排程和回撥呼叫之間經過的時間,該引數是時間差。
Clock 物件定義在“kivy.clock”模組中。它包含諸如“schedule_once()”和“schedule_interval()”等方法,用於註冊要在一定延遲後或以規則間隔呼叫的函式或方法。此機制對於處理定時事件、動畫更新和應用程式中的其他重複任務很有用。
函式“schedule_interval()”和“schedule_once()”都有兩個引數;一個回撥函式和以秒為單位的時間間隔。
from kivy.clock import Clock def clock_callback(dt): "Clock event occurred" # call clock_callback every 2 seconds Clock.schedule_interval(clock_callback, 2) # call clock_callback in 5 seconds Clock.schedule_once(clock_callback, 5)
超時 dt 引數的預設值為 0。因此,要儘快呼叫回撥函式,請將 schedule 事件的第二個引數設定為 0,或者透過不使用引數來使用預設值。
Clock.schedule_once(my_callback)
使用“-1”的超時會導致事件在下一幀之前發生,將其設定為 0 會導致事件在下一幀之後發生。
觸發事件
Clock 物件可以使用以下函式觸發時鐘事件:
schedule_interval(callback, timeout) - 此函式安排每隔指定秒數呼叫一次事件。該函式返回一個 ClockEvent 物件。在返回的事件上呼叫 ClockEvent.cancel() 以取消安排事件。
schedule_once(callback, timeout=0) - 此函式安排一個事件在指定秒數內執行一次,並返回 ClockEvent 物件。如果未指定超時或為 0,則將在渲染下一幀後呼叫回撥函式。要取消事件,請在返回的事件上呼叫 ClockEvent.cancel()。
create_trigger(callback, timeout=0) - 此函式建立一個觸發器事件。與其他兩個函式不同,事件不會自動安排,您需要呼叫它。與其他兩個類似,在執行事件之前取消它,方法是呼叫 ClockEvent.cancel()。要再次安排它,只需呼叫事件 (event())。
create_trigger() 函式具有以下引數:
callback - 要執行的回撥函式。來自 kivy。它採用一個 timeout 引數來指定在呼叫回撥函式之前等待多長時間。
interval - 一個布林引數,指示回撥函式應呼叫一次 (False) 還是重複呼叫。
from kivy.clock import Clock def clock_callback(dt): "Clock event occurred" triggerevent = Clock.create_trigger(clock_callback, 5) triggerevent()
要取消透過以上任一方式建立的事件,請使用 event.cancel() 或 event.unschedule() 方法。
示例
下面給出的程式碼在 Kivy 應用程式視窗上執行倒計時器。“kv”指令碼在一個列網格佈局中放置了一個 TextInput 框、一個標籤和一個按鈕。
<clockwidget>: GridLayout: cols:1 size:root.size TextInput : font_size : '30pt' id:t1 halign:'center' valign:'center' Label: id: l1 text : 'Current Value: ' font_size : '20pt' Button : id:b1 text : 'Start Countdown' font_size:20
佈局類 clockwidget 繼承 GridLayout 並將命令按鈕繫結到一個方法,該方法安排每隔一秒發生一次的週期性事件。
每次呼叫回撥函式時,標籤都會顯示遞減的數字,從使用者在文字框中輸入的值開始。當它達到 0 時,事件將透過其 cancel() 方法取消安排。
class clockwidget(GridLayout): def __init__(self, *args): super(*args).__init__() self.ids.b1.bind(on_press=self.showtime) def countdown(self, dt): if self.val==0: self.ids.l1.text="Countdown Stopped" self.ids.l1.color=[1,0,0] self.ev.cancel() self.ids.b1.disabled=False else: self.ids.l1.text="Current Value: {}".format(self.val) self.ids.l1.color=[1,1,1] self.val=self.val-1 def showtime(self, *args): self.val=int(self.ids.t1.text) self.ev=Clock.schedule_interval(self.countdown, 1) self.ids.b1.disabled=True
此練習的完整程式碼如下所示:
from kivy.app import App from kivy.uix.gridlayout import GridLayout from kivy.clock import Clock from kivy.core.window import Window Window.size = (720, 400) class clockwidget(GridLayout): def __init__(self, *args): super(*args).__init__() self.ids.b1.bind(on_press=self.showtime) def countdown(self, dt): if self.val == 0: self.ids.l1.text = "Countdown Stopped" self.ids.l1.color = [1, 0, 0] self.ev.cancel() self.ids.b1.disabled = False else: self.ids.l1.text = "Current Value: {}".format(self.val) self.ids.l1.color = [1, 1, 1] self.val = self.val - 1 def showtime(self, *args): self.val = int(self.ids.t1.text) self.ev = Clock.schedule_interval(self.countdown, 1) self.ids.b1.disabled = True class clockdemoapp(App): def build(self): w = clockwidget() w.cols = 1 return w clockdemoapp().run()
輸出
執行此程式時,它將顯示以下應用程式視窗。輸入倒計時器的值,然後單擊“開始”按鈕。

標籤開始更新,遞減倒計時值。

當它達到“0”時,按鈕將再次啟用。
