Как стереть все из текстового виджета tkinter? - PullRequest
9 голосов
/ 16 марта 2011

Я работаю над графическим интерфейсом для некоторой программы чата. Для ввода пользователя у меня есть виджет Text (), сообщения отправляются через «Возврат», и после этого я очищаю текст (). Но, как бы я ни старался, я не могу удалить последний "\ n", который создает кнопка Return.

Вот мой код для этой части:

def Send(Event):
   MSG_to_send=Tex2.get("1.0",END)
   client.send(MSG_to_send)
   Tex2.delete("1.0",END)

с нетерпением жду предложений)

Ответы [ 2 ]

7 голосов
/ 16 марта 2011

Скорее всего, ваша проблема в том, что привязка происходит за до вставки новой строки.Вы удаляете все, но затем вставляется символ новой строки.Это связано с характером работы текстового виджета - привязки виджетов происходят до привязок классов, а привязки классов - это когда пользовательский ввод фактически вставляется в виджет.

Решение, вероятно, настроит ваши привязки напроизойдет после привязок класса (например, путем привязки к <KeyRelease> или корректировки привязок).Не видя, как вы делаете связывание, я не могу точно сказать, что это ваша проблема.

Другая проблема заключается в том, что когда вы получаете текст (с Tex2.get("1.0",END)), вы, возможно,получать больше текста, чем вы ожидаете.Текстовый виджет tkinter гарантирует, что всегда есть новая строка после последнего символа в виджете.Чтобы получить только то, что пользователь ввел без этой новой строки, используйте Tex2.get("1.0","end-1c").При желании вы можете удалить все конечные пробелы из того, что находится в текстовом виджете, перед отправкой его клиенту.

0 голосов
/ 16 марта 2011

С помощью строки вы можете удалить последний символ с помощью:

msg = msg[:-2]

Вы также можете удалить все пробелы в конце строки (включая символы новой строки) с помощью:

msg = msg.rstrip()

OK,Прочитав ваш комментарий, я думаю, вы должны проверить эту страницу: Виджет текста Tkinter

, где это объясняется:

"Если вы вставляете или удаляете текстперед меткой метка перемещается вместе с другим текстом. Чтобы удалить метку, необходимо использовать метод * mark_unset * . Удаление текста вокруг метки не приводит к удалениюпометить себя. "

---- РЕДАКТИРОВАТЬ ----

Моя ошибка, не обращая внимания на вышеприведенный абзац.Марки не имеют ничего общего с переводом строки.Как объясняет Брайан в своем ответе: Текстовый виджет tkinter гарантирует, что после последнего символа в виджете всегда будет новая строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...