使用来自多个小部件的输入(并输出到另一个小部件)在Kivy中进行计算

时间:2016-04-19 07:10:11

标签: python kivy

我试图用kivy构建一个应用程序,询问一些数字,然后返回一个计算,但我需要在不同的小部件上提供输入数字。我一直在寻找一种方法来做到这一点,似乎可以用ObjectProperty()或NumericProperty()完成,但我无法找到正确的方法。对于准系统示例(显然不工作),下面是应用程序的代码,其中引入了两个数字并计算总和。 main.py是

    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout

    class SumRoot(BoxLayout):
        pass

    class FirstInput(BoxLayout):
        pass

    class SecondInput(BoxLayout):
        pass

    class OutputSlide(BoxLayout):
        def sum_of_inputs(self):
            self.resultado.text = str(float(self.first_input.text)+float(self.second_input.text))

    class SumApp(App):
        pass

    if __name__ == '__main__':
        SumApp().run()

和sum.kv文件是

    SumRoot:

    <SumRoot>:
        carousel: carousel
        first_slide: first_slide
        second_slide: second_slide
        third_slide: third_slide

        Carousel:
            id: carousel
            FirstInput:
                id: first_slide
            SecondInput:
                id: second_slide
            OutputSlide:
                id: third_slide

    <FirstInput>:
        orientation: "vertical"
        first: first_input
        TextInput:
            id: first_input
        Button:
            text: "Next"
            on_release: app.root.carousel.load_slide(app.root.second_slide)

    <SecondInput>:
        orientation: "vertical"
        second: second_input
        TextInput:
            id: second_input
        Button:
            text: "Sum"
            on_press: root.sum_of_inputs()
            on_release: app.root.carousel.load_slide(app.root.third_slide)

    <OutputSlide>:
        orientation: "vertical"
        result: result_output
        Label:
            id: result_output

预期的行为是当一个人按下&#34; sum&#34;按钮它计算总和,转到下一张幻灯片并显示总和。欢迎所有建议。

1 个答案:

答案 0 :(得分:0)

1)将输入的引用传递给进行计算的OutputSlide

OutputSlide:
    id: third_slide
    first_input: first_slide.first
    second_input: second_slide.second

2)在 py 文件中添加对象属性,该文件将保存它们:

from kivy.properties import ObjectProperty
...
class OutputSlide(BoxLayout):

    first_input = ObjectProperty()
    second_input = ObjectProperty()
    result = ObjectProperty()  # this one aswell, don't leave bare ids

3)正确计算结果on_press

<SecondInput>:
....
on_press: app.root.third_slide.sum_of_inputs()

此外,修复OutputScreen中的命名错误。