如何使用kivy将textinput转换为float并返回

Posted

技术标签:

【中文标题】如何使用kivy将textinput转换为float并返回【英文标题】:How to convert textinput to float and back with kivy 【发布时间】:2022-01-03 04:55:50 【问题描述】:

我是 python 和 kivy 的新手。我正在尝试制作一个简单的计算器程序,但问题是使用 textinputs,我无法进行任何计算,并且 textinput 不会转换为我可以转换为浮点数的字符串,进行计算并将其转换回按下按钮时串起来并显示它。我尝试了很多方法,但似乎无法解决这个问题。任何建议如何做到这一点?也许比我目前尝试做的更简单?

我在 on_press 后收到此错误: “第 47 行,在计算中 f_ROE = 浮动(s_ROE) ValueError:无法将字符串转换为浮点数:''

这是我的代码:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.core.window import Window


class Stonks(App):
    def build(self):
        layout = BoxLayout(orientation="vertical", spacing = 10, padding = 40)

        Instruction = Label(text = "Stock value calculator. Input values\nto get the intrinsic value of a stock\nbased on price to book value. Best \nused for value stocks.", bold = True, font_size = "20sp", )

        ROE_Label = Label(text = "What is company ROE?")
        self.ROE_input = TextInput(multiline = False)

        Growth_Label = Label(text = "What is company growth rate per annum?")
        self.Growth_input = TextInput(multiline = False)

        Rorr_Label = Label(text = "What is you rate of required return %?")
        self.Rorr_input = TextInput(multiline = False)

        self.Stock_Value = Button(text = "Stock value €", on_press = self.calculate)
        self.Stock_Value_2 = Label (text = "")

        layout.add_widget(Instruction)
        layout.add_widget(ROE_Label)
        layout.add_widget(self.ROE_input)
        layout.add_widget(Growth_Label)
        layout.add_widget(self.Growth_input)
        layout.add_widget(Rorr_Label)
        layout.add_widget(self.Rorr_input)
        layout.add_widget(self.Stock_Value)
        layout.add_widget(self.Stock_Value_2)
        return layout

    def calculate(self, instance):
        ROE = self.ROE_input
        Growth = self.Growth_input
        Rorr = self.Rorr_input

        s_ROE = str(ROE)
        s_Growth = str(Growth)
        s_Rorr = str(Rorr)

        f_ROE = float(s_ROE)
        f_Growth = float(s_Growth)
        f_Rorr = float(s_Rorr)
        f_value = ((f_ROE) - (f_Growth)) / ((f_Rorr - f_Growth))

        string_value = str(f_value)

        self.Stock_Value_2.text = string_value


Stonks().run()

【问题讨论】:

【参考方案1】:

从错误日志中,您传递的是一个对象的实例,而不是您所期望的。

尝试:

print(dir(self.ROE_input))

print(self.ROE_input.__dir__())

查看您尝试使用的该对象的属性。

【讨论】:

以上是关于如何使用kivy将textinput转换为float并返回的主要内容,如果未能解决你的问题,请参考以下文章

将 kivy 的 TextInput 限制为仅 ascii 字符

Python/Kivy:使用回车键将一个 TextInput 聚焦到另一个 TextInput

Kivy:如何摆脱 TextInput 中奇怪的阴影外观?

Kivy TextInput 如何从右侧开始输入

Kivy Textinput 未在 Windows 上检测到物理键盘

如何让 kivy Window.softinput_mode = 'below_target' 将 TextInput 框移动到虚拟键盘上方?