Python-检查ui文本字段中的整数

Python-检查ui文本字段中的整数,python,ios,pythonista,Python,Ios,Pythonista,在用于iOS的Python应用程序中,当我按下按钮时,我试图检查ui中的文本字段中是否有任何数字。当我在字符串上使用相同的代码时,它可以工作。当我在按钮操作中使用文本字段代码时,它不起作用。请帮忙?我的代码是这样的: import ui import console def contains_digits(d): for char in d: if char.isdigit(): return True return False test='test3' print(cont

在用于iOS的Python应用程序中,当我按下按钮时,我试图检查ui中的文本字段中是否有任何数字。当我在字符串上使用相同的代码时,它可以工作。当我在按钮操作中使用文本字段代码时,它不起作用。请帮忙?我的代码是这样的:

import ui
import console

def contains_digits(d):
 for char in d:
  if char.isdigit():
   return True
  return False

test='test3'
print(contains_digits(test)) #this works - it prints TRUE!

#below always prints failed even though it should print whatever is in the textfield?!

def button_pushed(sender):
  if contains_digits(textfield1):
   print(textfield1)
  print('failed')

v=ui.load_view()
textfield1 = str(v['textfield1'].text)
v.present('fullscreen')

您正在将变量
textfield
设置为字段文本,然后才能将任何文本输入
textfield1
textfield

如果您只需将textfield1设置为
v['textfield1']
,然后在按下
按钮的
功能中取出
.text
,该功能将起作用

def button_pushed(sender):
  if contains_digits(textfield1.text):
   print(textfield1.text)
   return
  print('failed')

v=ui.load_view()
textfield1 = v['textfield1']
v.present('fullscreen')
这是因为,它不会在启动时将文本设置为字段中的内容,而是等待您收到字段已更改的通知(假设是在调用按钮时)


但是,最好的方法是使用按钮接收的
sender
变量。假设您已经设置了文本字段,以便
textfield1.action
是按钮按下功能,那么发送者应该是文本字段,这样您就可以执行以下操作:

def button_pushed(sender):
  if contains_digits(sender.text):
   print(sender.text)
   return
  print('failed')
(请注意,按下按钮的方式是在代码中设置的,它将始终打印
失败
,即使它也打印半数字文本。成功打印后,您还需要
返回
。)

我知道有两种方法可以设置TextField来调用函数(或方法)作为Pythonista中的动作。最简单的方法可能是在代码中设置它

v=ui.load_view()
textfield1 = v['textfield1']
textfield1.action = button_pushed
v.present('fullscreen')
另一种方法是在UI文件中设置它。当您在UI编辑器中选择TextField,并查看TextField的设置时(我写这篇文章时,右上角的“I”按钮会显示设置),最底部的设置是“自定义属性”。将自定义属性设置为:

{'action':button_pushed}
一旦您进行了这些更改中的任何一项,则每当文本字段完成编辑(例如,通过按“回车”键或将焦点移动到另一个字段)时,都将调用该操作。当然,如果您这样做,并且结果证明这是您想要的行为,您可能希望将函数的名称从button_Pulsed更改为更具描述性的函数调用时间或原因


您可能还希望将文本字段的名称从默认的“textfield1”更改为更能说明其用途的名称,以便在有多个字段可供使用时使代码更易于理解。

缩进是否正确?是的-抱歉,这正是我在stackoverflow中键入的错误之处。将更新。谢谢你,杰瑞。这是一个很好的解释,而且非常有用。“假设您已经设置了TextField,以便textfield1.action是按钮按下功能”-我不相信我已经这样做了。你能为我进一步解释一下吗?