### main.py ###
from kivy.app import App
class MainScreen():
def button_clicked(self):
print("*")
class KivyApp(App):
pass
KivyApp().run()
### kivy.kv ###
MainScreen:
<MainScreen@BoxLayout>:
Button:
on_press: root.button_clicked()
為什么我不能從 kivy 呼叫 button_clicked() 函式?我知道我可以這樣稱呼它
類 MainScreen(BoxLayout)
在 main.py 中。但為什么我不能用上面的代碼?
uj5u.com熱心網友回復:
所以,我不是 100% 確定我的答案,但這是我認為正在發生的事情......
py 檔案首先運行,然后是 kv 檔案,因此如果在 py 檔案Class MainScreen(BoxLayout):中定義了 MainScreen 類并繼承自 BoxLayout... 那么規則在 kV 檔案中定義正常。當您@BoxLayout在 kV 檔案中使用 時,會再次創建該類,因此這會覆寫MainScreen. 由于 pyMainScreen已被 kV 覆寫,因此MainScreen該屬性root.button_clicked()不再存在....
如果你真的需要@BoxLayout在 kV 檔案中使用,你可以將函式添加到應用程式類中:
class LayoutApp(App):
def button_clicked(self):
print("*")
然后在 kV 檔案中:
MainScreen:
<MainScreen@BoxLayout>:
Button:
on_press: app.button_clicked()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/523717.html
標籤:Python功能基维
