2011-03-16 160 views
9

我正在爲一些聊天程序的GUI工作。對於用戶的輸入,我有Text()小部件,消息通過「Return」發送,然後清理Text()。但是盡我所能努力,我無法刪除返回按鈕創建的最後一個「\ n」。如何清除tkinter文本小部件中的所有內容?

這裏是我的這部分代碼:

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

期待着報價)

回答

7

很可能你的問題是你的綁定正在發生之前插入了換行符。您刪除了所有內容,但是插入了換行符。這是由於文本小部件的工作原理 - 小部件綁定發生在類綁定之前,類綁定是用戶輸入實際插入到小部件中的地方。

該解決方案很可能會調整您的綁定發生之後的類綁定(例如,通過綁定到<KeyRelease>或調整綁定標籤)。儘管沒有看到你是如何做綁定的,但我不可能確定這是你的問題。

另一個問題是,當你得到的文本(與Tex2.get("1.0",END)),你可能會得到比預期更多的文本。 tkinter文本小部件保證小部件中最後一個字符後面總是有一個換行符。要獲取用戶輸入的內容,請使用Tex2.get("1.0","end-1c")。或者,您可能希望在將文本小部件發送到客戶端之前,從文本小部件中刪除所有尾部空白。

+0

您對活動的建議與關於商標的建議混淆至關重要。現在一切正常,非常感謝。 – Andrey

0

一個字符串,你可以刪除最後一個字符用:

msg = msg[:-2] 

你也可以刪除所有從字符串末尾(包括換行符)開始的空格:

msg = msg.rstrip() 

好的。閱讀您的評論之後,我覺得你應該檢查此頁:The Tkinter Text Widget

,其中解釋:

「如果你插入或標記前刪除文本,標記與其他文字一起搬到了刪除標記,必須使用* mark_unset *方法。刪除標記周圍的文本不會刪除標記本身。「

---- ----編輯

我的錯誤,忽略上面的段落。標記與換行符無關。正如Bryan在他的回答中解釋的那樣:tkinter文本小部件保證小部件中最後一個字符後面總是有一個換行符。

+0

是的,但問題沒有與我發送給客戶端的消息相關聯; Tex2.delete()後我得到空的Tex2字段與插入光標在「2.0」,但我需要的是空的Tex2與光標在「1.0」 – Andrey

+0

感謝您的時間) – Andrey

+0

這並沒有解決刪除的問題文本小部件中的額外換行符...... –

相關問題