我正在为一些聊天程序工作。对于用户的输入我有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)
期待优惠)
答案 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文本小部件保证小部件中的最后一个角色后面总是有换行符。