如何清空tkinter文本组件的内容?
我正在为一个聊天程序制作图形界面。在用户输入的地方,我使用了一个文本框(Text()小部件),用户按下“回车”键发送消息,然后我会清空这个文本框。但是我试了很多方法,就是无法去掉最后一个“\n”,这个是按下回车键时自动生成的。
这是我这部分代码:
def Send(Event):
MSG_to_send=Tex2.get("1.0",END)
client.send(MSG_to_send)
Tex2.delete("1.0",END)
期待大家的建议哦)
2 个回答
如果你想从一个字符串中去掉最后一个字符,可以用下面的代码:
msg = msg[:-2]
你也可以用下面的代码去掉字符串末尾的所有空格(包括换行符):
msg = msg.rstrip()
好的,看到你的评论后,我觉得你应该看看这个页面:Tkinter文本小部件
在这里有解释:
“如果你在一个标记前插入或删除文本,那个标记会和其他文本一起移动。要移除一个标记,你必须使用 *mark_unset* 方法。删除标记周围的文本并不会移除标记本身。”
----编辑----
我错了,忽略上面的段落。标记和换行没有关系。正如Bryan在他的回答中解释的:tkinter文本小部件保证在小部件的最后一个字符后面总是有一个换行符。
你遇到的问题很可能是因为你的绑定操作发生在换行符插入之前。你删除了所有内容,但换行符随后又被插入了。这是因为文本小部件的工作方式决定的——小部件的绑定在类绑定之前发生,而类绑定是用户输入实际插入到小部件中的地方。
解决办法可能是调整你的绑定,让它在类绑定之后发生(比如,可以绑定到 <KeyRelease>
或者调整绑定标签)。不过,如果不清楚你是怎么进行绑定的,我也无法确定这就是你的问题所在。
另一个问题是,当你获取文本时(使用 Tex2.get("1.0",END)
),你可能会得到比预期更多的文本。因为 tkinter 的文本小部件保证在最后一个字符后面总是有一个换行符。如果你只想获取用户输入的内容而不包括这个换行符,可以使用 Tex2.get("1.0","end-1c")
。另外,你可能还想在将内容发送给客户端之前,去掉文本小部件中所有多余的空格。