- 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 - Garden
- 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.properties”模組中定義了Property類。你可以跟蹤這些屬性的變化,並且可以繫結回撥函式,以便在屬性改變時執行。
Kivy的屬性類支援以下特性:
值檢查/驗證
每當為屬性分配新值時,都會根據驗證約束對其進行檢查,以防止錯誤。例如,OptionProperty的驗證將確保該值位於預定義的可能性列表中。NumericProperty的驗證將檢查你的值是否為數字型別。
觀察者模式
你可以指定屬性值改變時應該發生什麼。你可以將自己的函式繫結為Property更改的回撥。例如,如果你想在小部件的pos屬性改變時呼叫一段程式碼,你可以將一個函式繫結到它。
更好的記憶體管理
同一屬性例項在多個小部件例項之間共享。
需要注意的是,Property物件與Python中內建的property()函式不同。
屬性物件必須在類級別宣告,而不是在類的任何方法中。
預設情況下,每個屬性都提供一個“on_
”事件,每當屬性的狀態/值改變時都會呼叫該事件。
示例
讓我們透過以下示例來學習Kivy中Property的行為。App類有一個NumericProperty屬性。NumericProperty物件(value)繫結到on_value_change()方法。
class NumPropApp(App):
value = NumericProperty(0)
def on_value_change(self, instance, value):
print(f"Value changed: {value}")
self.l1.text = str(value)
在build()方法中,應用程式有一個Label和一個Button,它們在一個垂直的BoxLayout中組合在一起。Button響應on_press事件呼叫onstart()方法,並將value加1。
def onstart(self, event):
print ("started")
self.value = self.value+1
def build(self):
lo = BoxLayout(orientation='vertical')
self.l1 = Label(text=str(self.value), font_size = 50)
self.b1 = Button(text = "start", font_size = 50)
self.b1.bind(on_press=self.onstart)
self.bind(value=self.on_value_change)
lo.add_widget(self.l1)
lo.add_widget(self.b1)
return lo
由於“on_value_change()”方法在每次value改變時都會被呼叫,因此每次按下按鈕時,標籤標題都會顯示從“0”開始遞增的數字。
以下是該示例的完整程式碼:
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.properties import NumericProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.config import Config
# Configuration
Config.set('graphics', 'width', '720')
Config.set('graphics', 'height', '400')
Config.set('graphics', 'resizable', '1')
class NumPropApp(App):
value = NumericProperty(0)
def on_value_change(self, instance, value):
print(f"Value changed: {value}")
self.l1.text = str(value)
def onstart(self, event):
print ("started")
self.value = self.value+1
def build(self):
lo = BoxLayout(orientation='vertical')
self.l1 = Label(text=str(self.value), font_size = 50)
self.b1 = Button(text = "start", font_size = 50)
self.b1.bind(on_press=self.onstart)
self.bind(value=self.on_value_change)
lo.add_widget(self.l1)
lo.add_widget(self.b1)
return lo
if __name__ == '__main__':
NumPropApp().run()
輸出
從命令列執行程式。按下按鈕,你會看到標籤上顯示的數字每次都會增加。
屬性型別
Kivy提供以下屬性型別:
NumericProperty - 處理數值,例如整數和浮點數。它只接受int或float數值資料型別,或者可以轉換為數字的字串。
count = NumericProperty(0)
StringProperty - 用於處理字串值。你可以使用“defaultvalue”引數對其進行初始化。
text = StringProperty("start")
BoundedNumericProperty - 此屬性類似於NumericProperty,但允許你為值定義最小和最大邊界。它還支援get_min()和get_max()方法,它們分別返回最小和最大可接受的值。
a = BoundedNumericProperty(1, min=0, max=100)
BooleanProperty - 處理布林值(True或False)。defaultvalue引數可以設定為True或False。
active = BooleanProperty(False)
ListProperty - 此屬性的值是一個List物件。將列表賦值給ListProperty時,儲存在屬性中的列表是列表的淺複製,而不是原始列表。
colors = ListProperty([1, 0, 0, 1])
ObjectProperty - 處理單個物件例項。如果rebind引數設定為True,則當任何中間屬性更改時,關聯的kv規則將被重新評估,所有屬性都將被重新繫結。
person = ObjectProperty(None)
OptionProperty - 指定屬性的預設值。它應該是Options引數中給出的列表中的一個。示例:
state = OptionProperty("None", options=["On", "Off", "None"])
ReferenceListProperty - 此屬性用於引用其他型別的多個屬性物件。
x = NumericProperty(0) y = NumericProperty(0) z = ReferenceListProperty(x, y)
更改“z”的值將自動相應地更改“x”和“y”的值。如果你讀取“z”的值,它將返回一個包含“x”和“y”值的元組。
AliasProperty - 為現有屬性提供別名或替代名稱。
def _get_width(self):
return self.size
def _set_width(self, value):
self.size = value
width = AliasProperty(_get_width, _set_width)
DictProperty - 用於使用多個引數作為字典鍵來定義物件的初始值。
params = DictProperty({
'xlog': False,
'xmin': 0,
'xmax': 100,
'ylog': False,
'ymin': 0,
'ymax': 100,
'size': (0, 0, 0, 0)
})
VariableListProperty - 列表項並將其擴充套件到所需的列表大小。
obj = VariableListProperty(defaultvalue, length)
defaultvalue引數指定列表的預設值。length引數是一個整數,可以是2或4。
ConfigParserProperty - ConfigParserProperty允許你根據其他kivy屬性自動監聽和更改指定鍵的值。
ConfigParserProperty(defaultvalue, section, key, config)
ConfigParser由多個部分組成,每個部分都有多個與這些鍵關聯的鍵值對。
username = ConfigParserProperty('', 'info', 'name', None)
ColorProperty - 處理各種格式的色彩值,例如RGB或十六進位制。此屬性可以賦值以下任何值:
0-1之間的3或4個浮點值的集合(kivy預設值)
格式為#rrggbb或#rrggbbaa的字串
表示顏色名稱的字串(例如,“red”、“yellow”、“green”)