[英]Can I perform simple math addition/subtraction in a button's text area in kivy?
我目前正在使用Python和Kivy创建一个简单的应用程序。 我目前有一个按钮,我希望按钮的文本显示其他两个按钮的文本的总和。 我不确定如何做到这一点。
我知道文本:仅接受字符串,因此我尝试使用int()
和str()
希望将文本转换为可以运行的内容。 但是我遇到的错误是
TypeError:'kivy.weakproxy.WeakProxy'对象不可调用
#abilityscore.kv
<AbilityScore@Button>:
font_size: 32
color: 0, 0, 0, 1
size: 50, 50
background_normal: ''
background_color: 153, 102, 0, 1
<BlankButton@Button>:
size: 50, 50
background_normal: ''
background_color: 153, 102, 0, 0
<CalcGridLayout>:
cols: 7
rows: 7
padding: 10
spacing: 10
AbilityScore:
id: str
text: "8"
AbilityScore:
id: strmod
text: "1"
AbilityScore:
text: str.text + strmod.text
使用当前的代码
text: str.text + strmod.text
我得到的结果是显示81的按钮,当我将其跳跃为9时。如前所述,我也尝试过
str(int(str.text) + int(strmod.text))
但出现“ TypeError:'kivy.weakproxy.WeakProxy'对象不可调用”错误。 我希望它能找到一种方法,让我有
AbilityScore:
id: str
text: "8"
AbilityScore:
id: strmod
text: "1"
AbilityScore:
text: <some code here>
其中<some code here>
返回结果9是str.text
和strmod.text
的总和。
我仔细看了str(int(str.text) + int(strmod.text))
,您会看到
str
(int(
str
.text) + int(strmod.text))
一旦命名了对象str
就可以尝试调用内置函数str
。 Python不再看到该函数,因为它在内部作用域中被同名对象所遮盖。 我认为这就是错误消息告诉您的内容:
TypeError:'kivy.weakproxy.WeakProxy'对象不可调用
因此,简而言之,如果避免名称冲突,应该有可能: *)
AbilityScore:
id: a_str
text: "8"
AbilityScore:
id: b_str
text: "1"
AbilityScore:
text: str(int(a_str.text) + int(b_str.text))
*)请记住,字符串可能无法评估为数字。 在给定的情况下,这似乎不是问题,因为text
值是由文字提供的。 如果值是在运行时生成的,则必须处理非数字输入,例如, 以PalimPalim所示的方式处理 。
你可以做类似的事情
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class CalcButton(Button):
@staticmethod
def to_num(s):
try:
float(s)
return float(s)
except ValueError:
return 0
kv_str = Builder.load_string(""" BoxLayout:
TextInput:
id: t1
TextInput:
id: t2
CalcButton:
text: str(self.to_num(t1.text) + self.to_num(t2.text))
""")
class MyApp(App):
def build(self):
return kv_str
if __name__ == '__main__':
MyApp().run()
如果将函数to_num导入到kv文件中而不通过类获取,则可以将其设为纯kv。 参见https://kivy.org/doc/stable/guide/lang.html#special-syntax
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.