Python - 检查ui文本域内的整数

时间:2017-10-25 13:58:42

标签: python ios pythonista

在iOS的pythonista应用程序中,当我按下按钮时,我试图检查我的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')

1 个答案:

答案 0 :(得分:1)

您可以在将任何文本输入textfield TextField之前将变量textfield1设置为字段的文本。

如果您只是将textfield1设置为v['textfield1'],然后在.text函数中获取button_pushed,则会有效。

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')

这是有效的,因为它不会将文本设置为启动时字段中的内容,而是等待您收到字段已更改的通知(假设是在调用 button_pushed 时)

但是,最好的方法是使用button_pushed接收的sender变量。假设您已将TextField设置为textfield1.action button_pushed 函数, sender 应该 TextField,以便您能做到:

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

(请注意, button_pushed 的方式在您的代码中设置,即使它也打印半数字文本,总是打印failed。成功打印后还需要return。)

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

v=ui.load_view()
textfield1 = v['textfield1']
textfield1.action = button_pushed
v.present('fullscreen')

另一种方法是在UI文件中设置它。如果在UI编辑器中选择了TextField,并且正在查看TextField的设置(当我写这个时,右上角的“i”按钮会显示设置),最底层的设置是“CUSTOM ATTRIBUTES” 。将自定义属性设置为:

{'action':button_pushed}

完成上述任一更改后,只要文本字段完成编辑(例如,按“返回”或将焦点移动到另一个字段),就会调用该操作。当然,如果你这样做并且结果是你想要的行为,你可能希望将函数的名称从 button_pushed 改为更能描述调用函数的时间或原因。

您可能还希望将TextField的名称从其默认的“textfield1”更改为更具描述性的目的,以便在您有多个字段可以使用时更容易理解代码。< / p>