【问题标题】:Python - checking for integers inside of a ui textfieldPython - 检查 ui 文本字段内的整数
【发布时间】:2018-04-06 15:54:07
【问题描述】:

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

【问题讨论】:

  • 你的缩进是否正确?
  • 是的 - 抱歉,这就是我在 stackoverflow 中输入错误的地方。会更新。谢谢

标签: python ios pythonista


【解决方案1】:

您将变量 textfield 设置为字段的文本,然后才能将任何文本输入到 textfield1 文本字段中。

如果您将 textfield1 设置为 v['textfield1'],然后在您的 button_pushed 函数中将 .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')

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

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

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

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

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

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”更改为更能描述其用途的名称,以便在您使用多个字段时使您的代码更易于遵循。

【讨论】:

  • 感谢这位杰瑞。这是一个很好的解释,真的很有帮助。
  • “假设你已经设置了 TextField 以便 textfield1.action 是 button_pushed 函数”——我不相信我已经这样做了。能否请您进一步解释一下?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多