kivy温度转换器

时间:2018-02-22 17:54:18

标签: python-3.x kivy

我正试图用Kivy创建一个华氏温度摄氏度计划。我一直在  未定义计算的错误。我不确定为什么会发生这种情况,因为它正在被定义。任何帮助将不胜感激。谢谢你的帮助。

from kivy.app import App
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.uix.gridlayout import GridLayout

runTouchApp(Builder.load_string('''
<Convert>:
    id: compute
    cols:2
    padding: 10
    spacing: 10
GridLayout:
    cols:2
    rows:3 
    Label:
        text: 'Fahrenheit'
    TextInput:
        id: entry
        multiline: False
    Label:
        text: 'Celsius'

    TextInput:
        id: result
        multiline: False

    Button:
        text: 'Convert'
        on_press: compute.celsius(result.text)
'''))

class Convert(GridLayout):
    def Temp(self,celsius):
        celsius = (entry-32) * 0.556
        if celsius:
            try:
                self.result.text = str(eval(celsius))
            except Exception:
                self.result.txt = 'Error'

class ConverApp(App):

    def build(self):
        return Convert()

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

1 个答案:

答案 0 :(得分:1)

您的代码有以下错误:

  • 当您使用compute.celsius()时,您假设转换类中有celsius()方法,但您没有。

  • 您必须使用Temp()方法而不传递任何参数。

  • 使用self.result时,您假设结果是Convert类的成员,但实际上并非如此。如果要访问.kv层次结构树中的元素,则必须通过id进行访问。

from kivy.app import App
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.uix.gridlayout import GridLayout

runTouchApp(Builder.load_string('''
<Convert>:
    id: compute
    cols:2
    padding: 10
    spacing: 10
    GridLayout:
        cols:2
        rows:3 
        Label:
            text: 'Fahrenheit'
        TextInput:
            id: entry
            multiline: False
        Label:
            text: 'Celsius'

        TextInput:
            id: result
            multiline: False

        Button:
            text: 'Convert'
            on_press: root.temp()
'''))

class Convert(GridLayout):
    def temp(self):
        try:
            fahrenheit = self.ids.entry.text
            celsius = (int(fahrenheit)-32) * 0.556
            self.ids.result.text = str(celsius)
        except ValueError:
            self.ids.result.text = 'Error'

class ConverApp(App):
    def build(self):
        return Convert()

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