Python 每次在Tkinter Entry小部件中键入分号时调用函数

Python 每次在Tkinter Entry小部件中键入分号时调用函数,python,tkinter,Python,Tkinter,我正在使用GUI(tkinter)的TCP聊天室工作,我不想从用户输入的消息中获取任何“:” 所以我决定,每当用户在输入框中键入“:”时,就会调用一个函数,并删除“:”。但首先调用函数,删除最后一个字符,然后在输入框中键入“:” 这是我的密码: #CODE OMITTED def typing_error(): temp_text = message_entry.get()[:-1] message_entry.delete(0, 'end') message_entr

我正在使用GUI(tkinter)的TCP聊天室工作,我不想从用户输入的消息中获取任何“:”

所以我决定,每当用户在输入框中键入“:”时,就会调用一个函数,并删除“:”。但首先调用函数,删除最后一个字符,然后在输入框中键入“:”

这是我的密码:

#CODE OMITTED

def typing_error():
    temp_text = message_entry.get()[:-1]
    message_entry.delete(0, 'end')
    message_entry.insert(0, temp_text)
    messagebox.showerror("Error", "Semicolon(:) is not allowed")

# Text box to send message
message_entry = tk.Entry(root, bg='grey')
message_entry.pack(side='bottom', fill='x')
message_entry.bind(':', lambda x: typing_error())

#CODE OMITTED
这是在键入“:”之前

在键入“:”之后

解析错误消息后


嗯,我知道为什么会这样,但不知道如何解决它。请帮助我。

首先使用此代码显示错误消息,然后删除分号


def typing_error():
    messagebox.showerror("Error", "Semicolon(:) is not allowed")
    message_entry.delete("end-2c")

message_entry = tk.Entry(root, bg='grey')
message_entry.pack(side='bottom', fill='x')
message_entry.bind(':', typing_error)

只需返回
“break”
即可在绑定回调中放弃它:

def键入错误(事件):
messagebox.淋浴错误(“错误”,“不允许使用分号(:)
返回“中断”
...
消息\u entry.bind(“:”,键入\u错误)

不,这不是问题所在。我尝试了这个方法,它删除了框的第一个字符,但是分号在那里。实际上,先调用函数,然后在文本框中插入分号。我想先在文本框中插入分号,然后调用该函数。@satyajitsatapathy,而不是生成临时变量并删除整个文本。只需删除最后一个字符,它显然是“:”。但在此之前,将显示错误消息。我将编辑代码,请务必检查。它现在给出的错误是
“end-2c”
不正确gateway@SatyajitSatapatathy尝试
len(message\u entry.get())-1
而不是
'end-2c'
@satyajitsatapathy我刚刚注意到您使用bind的方式容易出现错误,请将其更改为
message\u entry.bind(“:”,键入错误)
。如果我是对的,您仍然可以将带有冒号的文本粘贴到框中。感谢它的工作,我在毫无理由地使用
lambda
,我不知道
“break”
会停止正在进行的功能