### 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()函数?我知道我可以调用它,如果描述像
类主屏幕(框布局)
但是为什么我不能用上面的代码?
1条答案
按热度按时间eyh26e7m1#
所以,我不是100%肯定我的答案,但这里是我认为正在发生的事情...
首先运行py文件,然后运行kv文件,因此,如果在py文件中定义了
Class MainScreen(BoxLayout):
,则MainScreen类将从BoxLayout继承...然后,在kv文件中正常定义规则。当您在kV文件中使用@BoxLayout
时,将再次创建该类。因此,这将覆盖MainScreen
的第一个定义。由于pyMainScreen
已被kVMainScreen
覆盖,因此属性root.button_clicked()
不再存在....如果您确实需要在kV文件中使用
@BoxLayout
,则可以将该函数添加到app类中:然后在kV文件中: