将Kivy按钮链接到功能

时间:2016-09-02 17:41:14

标签: python kivy kivy-language

我有一些不明白的事情,我希望有人可以解雇。我已经在这个主题上做了大量的阅读,但它似乎并没有在我的脑海中连接。

我的问题来自于将功能链接到kivy按钮。 现在我正在努力学习如何做一个简单的功能:

def Math():
    print 1+1

我想做更复杂的事情:

def Math(a,b):
    print a^2 + b^2

ab是来自kivy的输入标签,点击按钮后会打印出答案。

这是我到目前为止所做的:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
from kivy.uix.widget import Widget
from kivy.uix.floatlayout import FloatLayout


#######``Logics``#######
class Math(FloatLayout):
    def add(self):
        print 1+1

#######``Windows``#######
class MainScreen(Screen):
    pass

class AnotherScreen(Screen):
   pass

class ScreenManagement(ScreenManager):
   pass


presentation = Builder.load_file("GUI_Style.kv")

class MainApp(App):
    def build(self):
       return presentation

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

这是我的kivy语言文件:

import NoTransition kivy.uix.screenmanager.NoTransition

ScreenManagement:
    transition: NoTransition()
    MainScreen:
    AnotherScreen:

<MainScreen>:
    name: "main"
    FloatLayout:
        Button:
            on_release: app.root.current = "other"
            text: "Next Screen"
            font_size: 50
            color: 0,1,0,1
            font_size: 25
            size_hint: 0.3,0.2
            pos_hint: {"right":1, "top":1}

<AnotherScreen>:
    name: "other"
    FloatLayout:
        Button:
            color: 0,1,0,1
            font_size: 25
            size_hint: 0.3,0.2
            text: "add"
            pos_hint: {"x":0, "y":0}
            on_release: root.add
        Button:
            color: 0,1,0,1
            font_size: 25
            size_hint: 0.3,0.2
            text: "Back Home"
            on_release: app.root.current = "main"
            pos_hint: {"right":1, "top":1}

1 个答案:

答案 0 :(得分:1)

<AnotherScreen>:
    name: "other"
    FloatLayout: 
        Button:
            ...
            on_release: root.add <-- here *root* evaluates to the top widget in the rule.

哪个是AnotherScreen实例,但它没有add方法。

class Math(FloatLayout):
    def add(self):
        print 1+1

在这里,你通过继承FloatLayout来宣告一个Math类,这是一个uix组件-a widget-。并且您在此类add上定义了一个方法。你仍然没有使用它。在kv文件中,您使用了FloatLayout

现在,为了让您能够访问kv中的函数,大多数时候您可以使用root / self或{app / #: import get_color_from_hex kivy.utils.get_color_from_hex <ColoredWidget>: canvas: Color: rgba: get_color_from_hex("DCDCDC") Rectangle: size: self.size pos: self.pos 或{来访问它作为uix组件的方法{1}},你也可以导入它,例如:

<AnotherScreen>:
    name: "other"
    Math:
        id: math_layout
        Button:
            ...
            on_release: math_layout.add()

所以你不能这样做:

class AnotherScreen(Screen):
   def add(self):
       print(1+1)

或者像这样:

{{1}}

如果您仍然无法保留此主题,我将很乐意提供更多帮助。