Python - 检查 ui 文本字段中的整数
Python - checking for integers inside of a ui textfield
在 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')
您正在将变量 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.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”按钮会调出设置),最底部的设置是“自定义属性”。将自定义属性设置为:
{'action':button_pushed}
一旦您进行了这些更改中的任何一项,那么只要文本字段完成编辑(例如,通过按“return”或将焦点移动到另一个字段),就会调用该操作。当然,如果您这样做并且结果是您想要的行为,您可能希望将函数名称从 button_pushed 更改为更具描述性的名称或者为什么调用该函数。
您可能还希望将 TextField 的名称从默认的“textfield1”更改为更能描述其用途的名称,以便在您有多个字段要使用时更容易理解您的代码.
在 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')
您正在将变量 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.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”按钮会调出设置),最底部的设置是“自定义属性”。将自定义属性设置为:
{'action':button_pushed}
一旦您进行了这些更改中的任何一项,那么只要文本字段完成编辑(例如,通过按“return”或将焦点移动到另一个字段),就会调用该操作。当然,如果您这样做并且结果是您想要的行为,您可能希望将函数名称从 button_pushed 更改为更具描述性的名称或者为什么调用该函数。
您可能还希望将 TextField 的名称从默认的“textfield1”更改为更能描述其用途的名称,以便在您有多个字段要使用时更容易理解您的代码.