如何在FloatLayout中的按钮下添加方法,Python + Kivy

How to add method under button in FloatLayout, Python + Kivy

我想在按钮下分配一个方法来做例子

我的主要 python 文件如下:

import kivy
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout

class MyGeneralForm(App):
    def build(self):
        return FloatLayout()

    def btnTestEnviron(self):
        print("Print this on console")

    def btnClose(self):
        self.root_window.close()

if __name__ == "__main__":
    MyGeneralForm().run()

如有错误请指正:

  1. 我定义 class MyGeneralForm 继承自 Class 来自 Kivy 的 App
  2. 我不确定为什么我定义这个方法“Build”,其中 return “FloatLayout” -> 它的行为是否像来自 Kivy 的 class 和 returns 布局的构造函数文件?
  3. 我在 class 中定义了两个额外的方法:btnTestEnviron 和 btnClose 我想打印某事。在控制台中并关闭 form/app
  4. name = main -> 每当你 运行 这个特定的 python 文件时执行脚本 -> 它创建 class MyGeneralForm 的对象并使用方法“运行 “据我所知,它是在 Kivy 的“App”之后继承的?
    为什么不是这样的:
TestApp = MyGeneralForm()    #I set the object of class MyGeneralForm   
TestApp.run()                #I use method run from object TestApp (inherited from App)

现在我的 Kivy 文件如下:

<Button>:
    font_size:20
    color:0.3,0.6,0.7,1
    size_hint: 0.4, 0.2

<FloatLayout>:
    Button:
        id: btnTestEnviron
        pos_hint: {"x":0.3,"y":0.75}
        text: "Run on test Environment"
        background_color: 0.3,0.4,0.5,1
        on_press: root.btnTestEnviron()

    Button:
        id: btnExit
        pos_hint: {"x":0.3,"y":0.0}
        text: "Exit"
        background_color: 0.3,0.4,0.5,1
        on_press: root.btnClose()
  1. 我定义了所有小部件的属性 -> 准确地说是按钮 -> 它们的字体、颜色、宽度、高度
  2. 然后我创建了 FloatLayout,其中我创建了两个按钮
  3. 如何将 class (MyGeneralForm) 中的方法(btnTestEnviron、btnClose)与这些按钮相关联?正确编程 运行s,但是当我单击按钮时,我收到以下错误:
   File "kivy\weakproxy.pyx", line 32, in kivy.weakproxy.WeakProxy.__getattr__

AttributeError: 'FloatLayout' object has no attribute 'btnTestEnviron'

    File "kivy\weakproxy.pyx", line 32, in kivy.weakproxy.WeakProxy.__getattr__

AttributeError: 'FloatLayout' object has no attribute 'btnClose'

您没有在布局中定义按钮功能class 这是正确的代码:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout

class FloatLayout(FloatLayout):
    def btnTestEnviron(self):
        print("Print this on console")

    def btnClose(self):
        App.get_running_app().stop()

class MyGeneralFormApp(App):
    def build(self):
        return FloatLayout()

    

if __name__ == "__main__":
    MyGeneralFormApp().run()