如何清空tkinter文本组件的内容?

10 投票
2 回答
19845 浏览
提问于 2025-04-16 13:48

我正在为一个聊天程序制作图形界面。在用户输入的地方,我使用了一个文本框(Text()小部件),用户按下“回车”键发送消息,然后我会清空这个文本框。但是我试了很多方法,就是无法去掉最后一个“\n”,这个是按下回车键时自动生成的。

这是我这部分代码:

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

期待大家的建议哦)

2 个回答

0

如果你想从一个字符串中去掉最后一个字符,可以用下面的代码:

msg = msg[:-2]

你也可以用下面的代码去掉字符串末尾的所有空格(包括换行符):

msg = msg.rstrip()

好的,看到你的评论后,我觉得你应该看看这个页面:Tkinter文本小部件

在这里有解释:

“如果你在一个标记前插入或删除文本,那个标记会和其他文本一起移动。要移除一个标记,你必须使用 *mark_unset* 方法。删除标记周围的文本并不会移除标记本身。”

----编辑----

我错了,忽略上面的段落。标记和换行没有关系。正如Bryan在他的回答中解释的:tkinter文本小部件保证在小部件的最后一个字符后面总是有一个换行符。

7

你遇到的问题很可能是因为你的绑定操作发生在换行符插入之前。你删除了所有内容,但换行符随后又被插入了。这是因为文本小部件的工作方式决定的——小部件的绑定在类绑定之前发生,而类绑定是用户输入实际插入到小部件中的地方。

解决办法可能是调整你的绑定,让它在类绑定之后发生(比如,可以绑定到 <KeyRelease> 或者调整绑定标签)。不过,如果不清楚你是怎么进行绑定的,我也无法确定这就是你的问题所在。

另一个问题是,当你获取文本时(使用 Tex2.get("1.0",END)),你可能会得到比预期更多的文本。因为 tkinter 的文本小部件保证在最后一个字符后面总是有一个换行符。如果你只想获取用户输入的内容而不包括这个换行符,可以使用 Tex2.get("1.0","end-1c")。另外,你可能还想在将内容发送给客户端之前,去掉文本小部件中所有多余的空格。

撰写回答