2016-07-23 1 views
1

ОС: Windows 8.1 Python 3.5Tkinter Проверьте текст виджет пуст

В Tkinter

Я нашел много кода, чтобы проверить, если поле ввода пусто. Но когда я пытаюсь применить тот же метод для виджета Text, он не работает. Похоже, что текстовый виджет имеет символ \ 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 не пробовал. Вот почему я спросил. Спасибо, что разъяснил мой вопрос. –