2017-10-25 92 views
0

iOSのpythonistaアプリケーションで、ボタンを押したときに私のUIのテキストフィールドに数値が入っているかどうかを確認しようとしています。私が文字列上で同じコードを使用すると、それは動作します。ボタンのアクション内でテキストフィールドのコードを使用すると、機能しません。助けてください?ここに私のコードは次のようである何:任意のテキストはtextfield1のTextFieldに入力することができる前に、フィールドのテキストに変数textfieldを設定している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') 
+0

あなたの字下げは正しいですか? –

+0

はい、それは申し訳ありません、それはちょうど私が間違ったstackoverflowにそれを入力したところです。更新されます。ありがとう – user1814798

答えて

0

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を使用することです。あなたが行うことができるようにtextfield1.actionbutton_pushed機能であるように、あなたがTextFieldを設定したと仮定すると、送信者 TextFieldのようになります。

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

をbutton_pushed方法があることに注意してくださいあなたのコードに設定し、それは常に印刷、それはまた、半数値テキストを印刷した場合でもfailed。また、成功した印刷後returnが必要になります。)

私は、Pythonistaのアクションとして関数(またはメソッド)を呼び出すTextFieldを設定する2つの方法を知っています。おそらくあなたのコード内に設定するのが最も簡単です。

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

もう1つの方法は、UIファイル内に設定する方法です。 UIエディタでTextFieldを選択し、TextFieldの設定を見ているとき(これを書いているとき、右上の「i」ボタンは設定を表示します)、一番下の設定は「カスタム属性」です。 。

{'action':button_pushed} 

あなたはこれらの変更のいずれかを行うと、テキストフィールドは、そのアクションを(例えば、「復帰」を押すか、別のフィールドにフォーカスを移動することによって)編集が終了した時はいつでも:にカスタム属性を設定します。呼び出されます。もちろん、あなたがこれを行い、あなたが望む振る舞いであることが判明した場合は、関数名がbutton_pushedから、その関数が呼び出される時期または理由をよりわかりやすく変更することができます。

TextFieldの名前をデフォルトの "textfield1"から目的をさらに説明するように変更して、複数のフィールドを操作した後でコードを簡単に実行できるようにすることもできます。

+0

これはありがとうございます。それは素晴らしい説明であり、本当に役立ちます。 – user1814798

+1

"TextFieldをtextfield1に設定したとします。アクションはbutton_pushed関数です " - 私はこれをやったとは思わないが、私のためにさらにそれを説明できますか? – user1814798

関連する問題