我正试图用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()
答案 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()