我无法从kivy中调用的Python函数

z2acfund  于 2022-10-30  发布在  Python
关注(0)|答案(1)|浏览(138)

### 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()函数?我知道我可以调用它,如果描述像
类主屏幕(框布局)
但是为什么我不能用上面的代码?

eyh26e7m

eyh26e7m1#

所以,我不是100%肯定我的答案,但这里是我认为正在发生的事情...
首先运行py文件,然后运行kv文件,因此,如果在py文件中定义了Class MainScreen(BoxLayout):,则MainScreen类将从BoxLayout继承...然后,在kv文件中正常定义规则。当您在kV文件中使用@BoxLayout时,将再次创建该类。因此,这将覆盖MainScreen的第一个定义。由于py MainScreen已被kV MainScreen覆盖,因此属性root.button_clicked()不再存在....
如果您确实需要在kV文件中使用@BoxLayout,则可以将该函数添加到app类中:

class LayoutApp(App):

  def button_clicked(self):
    print("*")

然后在kV文件中:

MainScreen:
<MainScreen@BoxLayout>:
    Button:
       on_press: app.button_clicked()

相关问题