14.【python kivy app 開發】導入StringProperty,定義類別函式變數&on_enter觸發

更新 發佈閱讀 18 分鐘


本篇開始:

  • 我的開發環境是win11
  • python是3.10.7版本
  • kivy我設定在2.1.0版本
  • 編碼的工具是Visual Studio Code(VS Code)

以我實際開發的APP為例,

我想做的是可以訓練基本加(減)法的心算工具。

命名app叫 「CountInMind」。


1.延續上兩篇,繼續編輯countinmind.kv,在<Secondscreen>下 FloatLayout版面,將難易程度添加各個題數存放,例如易(4)、中(7)、難(10)

☆目的:按下程度 Button同時呼叫類別中方法,終端機列印確認,並將題數內容儲存下來在後面他用(在第3頁可以綜合顯示出前面選擇的內容)

.py程式碼同上一篇

以下為.kv程式碼:

from kivy.properties import ColorProperty, ObjectProperty, NumericProperty
class Secondscreen(Screen):
text_color = Firstscreen.text_color
btn_bg_color = Firstscreen.btn_bg_color
description_of_degree = "程度說明:\n(易)適合國小中年級\n(中)適合國小高年級\n(難)適合國中一年級\n\n\n~~請點擊以下程度~~"
degree = NumericProperty()
def select_degree(self, num):
Secondscreen.degree = num
print(self.degree)

▲說明:使用調用屬性,從 Firstscreen類別調用 text_color及 btn_bg_color兩種屬性來調用。另外定義 select_degree這個方法。

以下為.kv程式碼:

 DegreeButton:
text: '易'
font_name: './font/TW-Kai-98_1.ttf'
font_size: 23
color: root.text_color
size_hint: 0.2, 0.15
pos_hint: {'center_x':0.27, 'center_y':0.3}
on_release: root.manager.current = 'third'; root.select_degree(4)

▲說明:root代表根物件(Secondscreen類別),呼叫類別中 select_degree方法,並將'4'回傳至.py該方法的參數num,並列印4出來。

DegreeButton:
text: '中'
font_name: './font/TW-Kai-98_1.ttf'
font_size: 23
color: root.text_color
size_hint: 0.2, 0.15
pos_hint: {'center_x':0.5, 'center_y':0.3}
on_release: root.manager.current = 'third'; root.select_degree(7)

▲說明:root代表根物件(Secondscreen類別),呼叫類別中 select_degree方法,並將'7'回傳至.py該方法的參數num,並列印7出來。

DegreeButton:
text: '難'
font_name: './font/TW-Kai-98_1.ttf'
font_size: 23
color: root.text_color
size_hint: 0.2, 0.15
pos_hint: {'center_x':0.73, 'center_y':0.3}
on_release: root.manager.current = 'third'; root.select_degree(10)

▲說明:root代表根物件(Secondscreen類別),呼叫類別中 select_degree方法,並將'10'回傳至.py該方法的參數num,並列印10出來。

★★★這邊沒有縮排(也就是沒有 tab鍵)

<DegreeButton@Button>
background_normal: ''
background_color: (0,0,0,0)
canvas.before:
Color:
rgb: (252/255, 236/255, 231/255)
RoundedRectangle:
size: self.size
pos: self.pos
radius: [65]

▲說明:以上<DegreeButton@Button>的用法,請參考第10篇內容,這邊就不再贅述


2.正式進入到app第3頁:繼續.kv,在<Thirdscreen>底下使用FloatLayout版面

2-1.延續前兩篇內容,直接設定類別的方法及屬性

☆目的:要在第3頁出現同時,綜合前2頁所點擊內容,然後在第3頁顯示一段玩法說明

記得:要先在前面導入StringProperty類別

以下.py程式碼

class Thirdscreen(Screen):
text_color = Firstscreen.text_color
btn_bg_color = Firstscreen.btn_bg_color
how_to_play = StringProperty()

def update_label(self):
self.how_to_play = f"玩法說明:\n進入測驗畫面,按下開始出題後,每2秒會隨機出現數字,每題有「{Secondscreen.degree}」個數字,總共「{Secondscreen.degree}」題,請使用「{Firstscreen.mode}」計算"
print(self.how_to_play)

▲說明1:使用調用屬性,從 Firstscreen類別調用 text_color及 btn_bg_color兩種屬性。設定how_to_play這個物件並繼承StringProperty(),另外定義 update_label這個方法。

▲說明2:將一段字串存入how_to_play,其中內容除了有既定字串,還有Secondscreen.degree、Firstscreen.mode 兩個屬性內容,這個時候就能發揮調用其他屬性的功效了!

2-2.設定on_enter方法

☆目的:使在進入第3頁(screen)時,同時觸發update_label 這個函式。

以下.kv程式碼

<Thirdscreen>:
name: 'third'
on_enter: root.update_label()
FloatLayout:
canvas:
Color:
rgb: (117/255, 220/255, 141/255)
Rectangle:
size: self.size
pos: self.pos
Label:
text:'歡迎使用心算大神'
font_name: './font/TW-Kai-98_1.ttf'
bold: True
font_size: 23
color: root.text_color
pos_hint: {'center_x':0.5, 'center_y':0.9}
Label:
text: '© farloveway ; version: 1.0'
font_size: 10
color: (0,0,0)
pos_hint:{'center_x':0.5, 'center_y':0.04}
Label:
text: root.how_to_play
text_size: self.width*0.8, self.height*0.5
halign: 'left'
font_name: './font/TW-Kai-98_1.ttf'
font_size:20
color: root.text_color
pos_hint: {'center_x':0.5, 'center_y':0.75}
Button:
text:'上一頁'
font_name: './font/TW-Kai-98_1.ttf'
front_size: 15
color: root.text_color
background_normal: ''
background_color: root.btn_bg_color
size_hint: 0.15, 0.1
pos_hint: {'center_x':0.1, 'center_y':0.9}
on_release: root.manager.current = 'second'


3.綜合測試,呈現成果如下圖

raw-image

▲說明:隨機,先點擊"減法"

raw-image

▲說明:隨機,再來點擊"中"

raw-image

▲說明:就會出現在第3頁同步更新的玩法說明啦(同時也可以看一下終端機列印的成果)


4.本篇小結

設定類別的方法(函式)及屬性(變數),運用調用屬性呈現內容,並且加入on_enter使其畫面進入就觸發函式。


為精簡篇幅,本篇所使用完整(.py)(.kv)程式碼,請參考第9~13篇內容

本篇結束:

在自學路上遇到困難是很正常的事,只要堅持到底,相信就會有所成果,期勉大家一同努力。

留言
avatar-img
艾肯比工程師
4會員
77內容數
主要分享應用程式開發過程、遭遇困難及解決技巧,提供給自學或獨立開發者做為參考,希望能對您們有所幫助。
艾肯比工程師的其他內容
2025/04/30
這篇文章記錄了使用Kivy框架開發一個心算訓練APP的過程,其中介紹使用Python程式碼產生隨機數字,並在介面上顯示。文章以我開發 CountInMind APP為例,說明如何隨機數字生成、避免數字重複以及加減法計算等功能。本篇為求精簡,完整的程式碼請參考先前文章中分享內容。
Thumbnail
2025/04/30
這篇文章記錄了使用Kivy框架開發一個心算訓練APP的過程,其中介紹使用Python程式碼產生隨機數字,並在介面上顯示。文章以我開發 CountInMind APP為例,說明如何隨機數字生成、避免數字重複以及加減法計算等功能。本篇為求精簡,完整的程式碼請參考先前文章中分享內容。
Thumbnail
2025/04/23
這篇文章記錄了使用Kivy框架開發一個心算訓練APP的過程,其中介紹使用Python程式碼產生隨機數字,並在介面上顯示。文章以我開發 CountInMind APP為例,說明如何隨機數字生成、避免數字重複以及減法計算等功能。本篇為求精簡,完整的程式碼請參考先前文章中分享內容。
Thumbnail
2025/04/23
這篇文章記錄了使用Kivy框架開發一個心算訓練APP的過程,其中介紹使用Python程式碼產生隨機數字,並在介面上顯示。文章以我開發 CountInMind APP為例,說明如何隨機數字生成、避免數字重複以及減法計算等功能。本篇為求精簡,完整的程式碼請參考先前文章中分享內容。
Thumbnail
2025/04/18
這篇文章記錄了使用Kivy框架開發一個心算訓練APP的過程,其中介紹使用Python程式碼產生隨機數字,並在介面上顯示。文章以我開發 CountInMind APP為例,說明如何隨機數字生成、避免數字重複以及加法總和計算等功能。本篇為求精簡,完整的程式碼請參考先前文章中分享內容。
Thumbnail
2025/04/18
這篇文章記錄了使用Kivy框架開發一個心算訓練APP的過程,其中介紹使用Python程式碼產生隨機數字,並在介面上顯示。文章以我開發 CountInMind APP為例,說明如何隨機數字生成、避免數字重複以及加法總和計算等功能。本篇為求精簡,完整的程式碼請參考先前文章中分享內容。
Thumbnail
看更多
你可能也想看
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
看完上篇 4 位新成員的靈魂拷問,是不是意猶未盡?別急,野格團新血的驚喜正接著登場!今天下篇接力的另外 4 位「個人主題專家」,戰力同樣驚人──領域從旅行美食、運動、商業投資到自我成長;這些人如何維持長跑般的創作動力?在爆紅的文章背後,又藏著哪些不為人知的洞察?5 大靈魂拷問繼續出擊
Thumbnail
看完上篇 4 位新成員的靈魂拷問,是不是意猶未盡?別急,野格團新血的驚喜正接著登場!今天下篇接力的另外 4 位「個人主題專家」,戰力同樣驚人──領域從旅行美食、運動、商業投資到自我成長;這些人如何維持長跑般的創作動力?在爆紅的文章背後,又藏著哪些不為人知的洞察?5 大靈魂拷問繼續出擊
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
INI 檔案是一種配置檔案格式,常用於保存設定資料和組態資訊。 它使用簡單的鍵值對結構來組織資料,通常用於程式、應用程式或操作系統中的配置和初始化設定。 INI 檔案每個鍵值對包含一個名稱(鍵)和對應的值。 基本的檔案格式如下: [Section1] Key1 = Value1 Key2 =
Thumbnail
INI 檔案是一種配置檔案格式,常用於保存設定資料和組態資訊。 它使用簡單的鍵值對結構來組織資料,通常用於程式、應用程式或操作系統中的配置和初始化設定。 INI 檔案每個鍵值對包含一個名稱(鍵)和對應的值。 基本的檔案格式如下: [Section1] Key1 = Value1 Key2 =
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
在程式開發中,協作合作專案時,利用type hint,可以快速知道函式輸入及輸出的資料型別,在後續的維護時也會更加方便及可讀。 Type hints 是Python 3.5 版本引入的功能,它允許在函數宣告中指定參數和傳回值的類型。Type hints 是一種可選的註解形式,不會影響程式碼的運行,
Thumbnail
在程式開發中,協作合作專案時,利用type hint,可以快速知道函式輸入及輸出的資料型別,在後續的維護時也會更加方便及可讀。 Type hints 是Python 3.5 版本引入的功能,它允許在函數宣告中指定參數和傳回值的類型。Type hints 是一種可選的註解形式,不會影響程式碼的運行,
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
在Python函式中,可以使用None來指定動態的預設引數,使用更靈活,Docstrings同時能夠提供清晰的文檔。本篇文章說明利用這種方式來讓函式更彈性,輸入不同型態的關鍵字引數,並在事件紀錄時間的Log訊息的範例中詮釋,可自行輸入時間或者預設導入系統的時間,在跟其他程式交握時,可以更靈活的應用。
Thumbnail
在Python函式中,可以使用None來指定動態的預設引數,使用更靈活,Docstrings同時能夠提供清晰的文檔。本篇文章說明利用這種方式來讓函式更彈性,輸入不同型態的關鍵字引數,並在事件紀錄時間的Log訊息的範例中詮釋,可自行輸入時間或者預設導入系統的時間,在跟其他程式交握時,可以更靈活的應用。
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News