如何从tkinter文本小部件中删除所有内容?

时间:2011-03-16 07:04:58

标签: python tkinter

我正在为一些聊天程序工作。对于用户的输入我有Text()小部件,消息通过“Return”发送,之后我清理Text()。但是,尽管我尝试了很难,但我无法删除Return按钮创建的最后一个“\ n”。

以下是此部分的代码:

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

期待优惠)

2 个答案:

答案 0 :(得分:7)

最有可能的问题是,在插入换行符之前,正在发生绑定。您删除了所有内容,但随后插入了换行符。这是由于文本小部件的工作原理 - 小部件绑定在类绑定之前发生,而类绑定是用户输入实际插入小部件的地方。

解决方案可能会调整绑定,使其在类绑定后发生(例如,通过绑定到<KeyRelease>或调整bindtags)。但是,如果没有看到你如何进行绑定,我就不可能确定这是你的问题。

另一个问题是,当您获得文本(使用Tex2.get("1.0",END))时,您可能会获得比预期更多的文本。 tkinter文本小部件保证小部件中的最后一个字符后面始终有换行符。要获得用户在没有此换行符时输入的内容,请使用Tex2.get("1.0","end-1c")。 (可选)您可能希望从文本窗口小部件中删除所有尾随空格,然后再将其发送到客户端。

答案 1 :(得分:0)

使用字符串,您可以删除最后一个字符:

msg = msg[:-2]

您还可以使用以下命令从字符串末尾(包括换行符)中删除所有空格:

msg = msg.rstrip()

行。阅读完评论后,我认为您应该查看此页面:The Tkinter Text Widget

解释如下:

“如果您在标记前插入或删除文字,则标记会与其他文字一起移动。要删除标记,您必须使用 * mark_unset * 方法。删除标记周围的文字不会删除标记本身。“

---- ---- EDIT

我的错误,无视上段。标记与换行符无关。正如Bryan在他的回答中解释的那样: tkinter文本小部件保证小部件中的最后一个角色后面总是有换行符。