本篇開始:
- 我的開發環境是win11
- python是3.10.7版本
- kivy我設定在2.1.0版本
- 編碼的工具是Visual Studio Code(VS Code)
【本篇說明】在kivy裡面,屬性(property)有分很多種,比如 NumericProperty、ColorProperty、ObjectProperty、BooleanProperty 等等,這次要來分享的是 ColorProperty。
ColorProperty 在中文翻譯為"顏色屬性",是專門用來存放 rgba(或rgb)顏色串列,預設值為[1.0, 1.0, 1.0, 1.0](白色),通常屬性會在類別中宣告使用,不同於"變數"宣告,變數只能存放數字、字串以及布林值。以下使用基本語法:
1.寫下固定的程式碼
以下.py程式碼:(在vscode開啟python檔案,取名為main.py,以下簡稱.py)
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
class firstlayout(FloatLayout):
pass
class Mainapp(App):
def build(self):
return firstlayout()
if __name__ == "__main__":
Mainapp().run()
▲說明:
1.從 kivy.uix.floatlayout這個模組導入 FloatLayout類別 (如果還沒看過,可參考:【kivy layout】FloatLayout類別的使用方法)
2.創建一個class 類別取名為 firstlayout(可自取無限定命名),然後在()填入 FloatLayout,目的是為了繼承 FloatLayout類別所有特性
3.這邊 kivy language(kv),我使用的是"相同命名方式",如果不太懂我說的,可先參考這篇:【kivy language】如何使用 kivy language(kv)

▲說明:main.py程式碼
2.將屬性及函式寫入 Python檔案
1.以下 main.py程式碼:
from kivy.properties import ColorProperty
▲說明:導入屬性 ColorProperty
2.改寫 firstlayout類別內容
class firstlayout(FloatLayout):
a1 = ColorProperty([30/255, 30/255, 30/255])
a2 = ColorProperty('lightpink')
a3 = ColorProperty([117/255, 220/255, 141/255])
a4 = ColorProperty()
def change_color(self, background_color):
self.a4 = background_color
def on_a4(self, instance, value):
print("a4顏色屬性值改變了,為:", value)
▲說明:
1.宣告屬性 a1,將[30/255, 30/255, 30/255] 顏色串列存入
2.宣告屬性 a2,將 'lightpink' 存入,除了可填為顏色串列,也可填入字串
3.宣告屬性 a3,將[117/255, 220/255, 141/255] 顏色串列存入
4.宣告屬性 a4,將預設值(白色)存入
5.定義函式 change_colo,()裡面加入 self, background_color 等兩個參數
6.使 a4為 background_color傳入的參數值
7.屬性特有的觸發事件,當屬性值發生改變時,就能觸發函式,命名時必須是on_加上 a4
8.定義函式 on_a4(),()裡面加入 self, instance, value 這3個參數,其中 value為 a4的屬性值
9.列印出 a4屬性值來確認,主要是為了複核用

▲說明:main.py程式碼
3.在 VSCode新增(kivy)檔案,我取名 main.kv,並且放在同資料夾內

▲說明:我的是放在以下路徑:桌面-> python-> Kivy-> test
4.寫入 main.kv程式碼
以下.kv程式碼:(在vscode編輯 main.kv,簡稱.kv)
<firstlayout>:
FloatLayout:
a4:b4
Button:
size_hint: .2, .2
pos: 200, 50
background_normal: ''
background_color: root.a1
on_press: root.change_color(self.background_color)
Button:
size_hint: .2, .2
pos: 400, 50
background_normal: ''
background_color: root.a2
on_press: root.change_color(self.background_color)
Button:
size_hint: .2, .2
pos: 600, 50
background_normal: ''
background_color: root.a3
on_press: root.change_color(self.background_color)
Label:
id: b4
text:'its a showcase'
font_size: 50
bold: True
color: root.a4
size_hint: .3, .3
pos_hint: {'center_x':.5, 'center_y':.7}
▲說明:
1.有關 Button及 Label基本使用,請參考[【kivy Label】經常使用的Label(標籤)語法]、[【kivy Button】經常使用的Button(按鈕)語法]
2.在<firstlayout> :底下縮排加入 FloatLayout:
3.a4:b4,讓 a4屬性對等 b4參數,在kivy要使用分號":",不同於python使用等號"="
4.id:b4,讓 Label物件的 id參數等於 b4
5.background_color: 為 root根物件(也就是類別 firstlayout)的 a1 ~ a3屬性值
6.on_press: 呼叫 root根物件(也就是類別 firstlayout)的 change_color函式
7.將物件本身的 background_color 帶入 change_color函式使用
8.因改變 a4屬性值,也就改變了Label的 color參數值

▲說明:main.kv程式碼
5.執行 Python檔案




▲說明:每當按下 Button時,屬性值改變了,呼叫函式會使 Label字體顏色改變

▲說明:透過終端機列印,確認 a4屬性值
6.如果不用屬性,改用變數也可以有相同效果嗎?
現在將顏色屬性改為變數,變數可為數字、字串及布林值
改寫以下main.py程式碼:
a4 = 'white'
▲說明:宣告變數 a4,將字串'white'存入

▲說明:改寫的 main.py程式碼

▲說明:執行Python檔案,按下 Button時,也不會改變顏色

▲說明:終端機無列印結果
7.本篇小結
透過顏色屬性,可以存入不同的顏色串列或字串,當屬性值發生改變,也能同時觸發函式。但是,變數無法做到這樣的效果。
本篇結束:
在自學路上遇到困難是很正常的事,只要堅持到底,相信就會有所成果,期勉大家一同努力。













