2016-07-23 3 views
1

OS:TkinterのをチェックTkinterの

でのWindows 8.1 Pythonは3.5

私は入力ボックスが空であるかどうかを検証するために、コードの多くを発見しました。しかし、テキストウィジェットに対して同じメソッドを適用しようとすると、それは機能しません。テキストウィジェットに\ n文字があり、それが問題であるようです。

どのようにこの検証を行うのですか?

+0

なぜ 'get'メソッドを使用しないのですか? –

答えて

0

Tkinterは自動的にウィジェットのデータの最後に改行を追加します。ウィジェットが空であるかどうかを調べるには、この改行の直前のインデックスを開始インデックスと比較します。それらが同じ場合、ウィジェットは空です。

インデックス"end-1c"(または"end - 1 char")を使用して、末尾の改行の直前の文字のインデックスを表すことができます。テキストウィジェットのcompareメソッドを使用して比較を行うことができます。

if text.compare("end-1c", "==", "1.0"): 
    print("the widget is empty") 

あなたのウィジェットに数百メガバイトを持っていないと仮定すると、あなたはまた、内容を取得し、ゼロに長さを比較することができます。これにより、ウィジェット内のデータの一時的なコピーが作成されます。これは、ほとんどの場合、かなり無害でなければなりません。ここでも、末尾の改行を取得したくありません:

if len(text.get("1.0", "end-1c")) == 0: 
    print("the widget is empty") 
+0

'compare'メソッドのための親指。この場合、 'get'メソッドを使うのは良い考えではありませんか? –

+0

@ParvizKarimli:あなたが望むなら 'get'を使うことができます。それはデータのコピーを作るので、それは比較よりも遅く、より多くのメモリを消費します。ほとんどの場合、ウィジェットに数百または数千メガバイトをロードしない限り、パフォーマンスの差は目に見えません。 –

+0

はい、そうです、私はそれを知っています。私はちょうど何かが 'get'で間違っていると思ったので、@ user2067030はそれを試していませんでした。それが私が尋ねた理由です。私の質問を明確にしてくれてありがとう。 –