【问题标题】:Auto calculate result in app make in kivy/ python在 kivy/python 中的应用程序中自动计算结果
【发布时间】:2020-03-10 09:38:02
【问题描述】:

是否可以在kivy中获得自动结果计算?我认为我有 3 个 TextInput 字段,当其中至少 2 个填写 3 时,我会得到结果。

我想到了类似的东西:

--------------
|  2         |  --> TextInput 1
--------------
|result = 5  |  --> TextInput 2
-------------
|    3       |  ---> TextInput 3
--------------

Or

--------------
| result = 5 |  --> TextInput 1
--------------
|     2      |  --> TextInput 2
-------------
|    3       |  ---> TextInput 3
--------------

输入至少 2 个数字后,结果应该会自动出现。

我的.py:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen


class HomeScreen(Screen):
    pass


class CalculatorHome(Screen):
    pass


GUI = Builder.load_file("kv/my.kv")


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

    def change_screen(self, screen_name, direction):
        # Get the screen manager from the kv file
        screen_manager = self.root.ids['screen_manager']
        screen_manager.current = screen_name
        screen_manager.transition.direction = direction

    def clear_text(self, *args):
        for ar in args:
            ar.text = ''


MainApp().run()

使用 TextIput 计算.kv

<CalculatorHome>:
    FloatLayout:

        GridLayout:

            rows:3
            pos_hint: {"top": .8, "left": 1 }
            size_hint: 1, .4

            TextInput:
                id: number1
                multiline: False
            TextInput:
                id: number2
                multiline: False
            TextInput:
                id: number3
                multiline: False

        GridLayout:

            rows:1
            pos_hint: {"top": .3, "left": 1 }
            size_hint: 1, .1

            Button:
                text: "CLEAR"
                on_press: app.clear_text(number1, number2, number3 )

【问题讨论】:

    标签: python android kivy kivy-language


    【解决方案1】:

    如果你把一些东西从kv放到python文件中会更简单,像这样:

    class MainApp(App):
        def build(self):
           # if you use ScreenManager you should return it in build function
           self.sm = ScreenManager()
           # creating the objects of screen classes
           self.homescreen = HomeScreen()
           self.calculatorhome = CalculatorHome()
           # don't forget to set names of screens in kv file!
           self.sm.add_widget(self.homescreen)
           self.sm.add_widget(self.calculatorhome)
           self.t1 = ObjectProperty(None)
           self.t2 = ObjectProperty(None)
           self.t3 = ObjectProperty(None)
           Clock.schedule_once(self.gettextinputs)
           return self.sm
    
        def gettextinputs(self, *args):
            # get textinputs from kv
            self.t1 = self.calculatorhome.ids.number1
            self.t2 = self.calculatorhome.ids.number2
            self.t3 = self.calculatorhome.ids.number3
    
            # bind on change function calling
            self.t1.bind(text = lambda e1, e2: self.checkinputs())
            self.t2.bind(text = lambda e1, e2: self.checkinputs())
            self.t3.bind(text = lambda e1, e2: self.checkinputs())
    
        def checkinputs(self):
            if self.t1.text and self.t2.text:
                result = int(self.t1.text) + int(self.t2.text)
                self.t3.text = str(result)
            elif self.t1.text and self.t3.text:
                result = int(self.t1.text) + int(self.t3.text)
                self.t2.text = str(result)
            elif self.t2.text and self.t3.text:
                result = int(self.t2.text) + int(self.t3.text)   
                self.t1.text = str(result)
    

    所以现在当您更改文本输入的文本时,空的将显示其他两个的结果。

    【讨论】:

    • 方法gettextinputs()checkinputs()不应该在类MainApp()
    • @piotr_python 他们当然应该,这是我的错误,答案已编辑
    • 下一个问题是:self.t1 = self.calculatorhome.ids.number1 AttributeError: 'MainApp' object has no attribute 'calculatorhome'要不要加selfcalculatorhome
    • @piotr_python 是的,再次检查我的答案,我在那里添加了它
    • @piotr_python 是的,现在它在 MainApp 类中定义。所以从那里你可以使用self.sm.current = 'calculator'。但是,当您创建像 self.calculatorhome = CalculatorHome(name='calculator') 这样的对象时,您应该在 kv 文件(如 name: 'calculator')或 py 文件中为屏幕命名
    猜你喜欢
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2016-05-02
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多