本篇開始:
- 我的開發環境是win11
- python是3.10.7版本
- kivy我設定在2.1.0版本
- 編碼的工具是Visual Studio Code(VS Code)
【本篇說明】在kivy裡面,屬性(property)有分很多種,比如說 NumericProperty、ColorProperty、ObjectProperty、BooleanProperty 等等,這次要分享的是 StringProperty。
StringProperty 在中文翻譯為"字串屬性",是專門用來存放"字串",預設值為""(空字串),通常屬性會在類別中宣告使用,不同於"變數"宣告,變數只能存放數字、字串以及布林值。
以下使用基本語法:
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 StringProperty
▲說明:導入屬性StringProperty
2.改寫 firstlayout類別內容
class firstlayout(FloatLayout):
mode = StringProperty("minus")
degree = StringProperty("easy")
▲說明:
1.宣告屬性 mode,將字串 "minus"存入
2.宣告屬性 degree,將字串 "easy"存入
3.以上兩個屬性,為了待會調用其他類別屬性而展示

▲說明:main.py程式碼
3.創建 seconflayout類別內容
class secondlayout(FloatLayout):
how_to_play = StringProperty()
mode = firstlayout.mode
degree = firstlayout.degree
def update_label(self):
self.how_to_play = f"Welcome~\n you choose mode is [{self.mode}]\n you choose degree is [{self.degree}]"
def on_how_to_play(self, instance, value):
print("how_to_play屬性值改變了,為:", value)
▲說明:
1.創建類別,取名叫 secondlayout()
2.宣告屬性 how_to_play,預設值為""(空字串)
3.宣告屬性 mode,將調用的 firstlayout.mode屬性值存入,調用語法為【類別名稱.屬性名稱】
4.宣告屬性 degree,將調用的 firstlayout.degree屬性值存入,調用語法為【類別名稱.屬性名稱】
5.定義函式 update_label,()裡面加入 self
6.使本身的 how_to_play屬性值為以上格式化字串內容,其中 {self.mode}、{self.degree}為本身兩個 mode、degree屬性值
7.這時,how_to_play屬性值已不是原先的"",屬性特有的觸發事件,當屬性值發生改變時,就能觸發函式,命名時必須是on_加上 how_to_play
8.定義函式 on_how_to_play(),()裡面加入 self, instance, value 這3個參數,其中 value為 how_to_play後來存入的屬性值
9.列印出 how_to_play屬性值來確認,主要是為了複核用

▲說明:main.py程式碼
4.別忘了要改成回傳 secondlayout()
return secondlayout()

3.在 VSCode新增(kivy)檔案,我取名 main.kv,為了符合上面說的"相同命名方式",並且放在同資料夾內

▲說明:我的是放在以下路徑:桌面-> python-> Kivy-> test
4.寫入 main.kv程式碼
以下.kv程式碼:(在vscode編輯 main.kv,簡稱.kv)
<secondlayout>:
Button:
text: 'show instructions'
size_hint: .2, .2
pos: 400, 50
on_press: root.update_label()
Label:
text:root.how_to_play
font_size: 20
bold: True
size_hint: .3, .3
pos_hint: {'center_x':.5, 'center_y':.7}
▲說明:
1.有關 Button及 Label基本使用,請參考[【kivy Label】經常使用的Label(標籤)語法]、[【kivy Button】經常使用的Button(按鈕)語法]
2.Button,當按下時,呼叫函式 update_label()
3.Label,使 text參數為 root根物件(也就是類別 secondlayout)的 how_to_play屬性值

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

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

▲說明:透過終端機列印,確認 how_to_play屬性值
6.本篇小結
雖然"變數"跟"字串屬性"都可存入字串,不過透過【調用屬性方式】,就可以運用別個類別的屬性值,在程式碼維護也會比較方便。
本篇結束:
在自學路上遇到困難是很正常的事,只要堅持到底,相信就會有所成果,期勉大家一同努力。















