需要反转 tk 文本框小部件 event/handler 优先级 - python
need to reverse tk textbox widget event/handler priority - python
我有一个文本框小部件,它有 2 个事件绑定,如下所示:
F2_text_editor.bind('<Return>', lambda e: on_key_release())
F2_text_editor.bind("<BackSpace>", lambda e: on_key_release(), add="+")
我正在为我的文本编辑器添加行号。到目前为止一切都很好,但我遇到的最后一个问题不是我认为可以解决的问题吗?
基本上发生的事情是,当我按下键盘上的任一绑定键时,它会执行功能,然后从键盘本身完成操作。
例如,假设我有一个绑定和一个打印消息的函数。
当我点击 Return 时,它会打印出消息,然后将光标移动到下一行。
有没有办法扭转这种局面?
这里是代码:
def on_key_release():
print("on_key_release")
#F2_line_numbers.delete("1.0", "end")
final_index = str(F2_text_editor.index("end-1c"))
print(f"final_index: {final_index}")
num_of_lines = final_index.split('.')[0]
print(f"num_of_lines: {num_of_lines}")
line_numbers_string = "\n".join(str(no + 1) for no in
range(int(num_of_lines)))
#print(f"line_numbers_string: {line_numbers_string}")
width = len(str(num_of_lines))
#print(f"width: {width}")
F2_line_numbers.configure(state='normal', width=width)
F2_line_numbers.delete("1.0", "end")
F2_line_numbers.insert("1.0", line_numbers_string)
F2_line_numbers.configure(state='disabled')
我需要反转 'event/handler' 优先级的原因是,例如当我在第 1 行并点击 Return 时,该函数在我在线时打印出 'index 1.0 / num of line: 1' 2. 然后我按退格键,当我在第 1 行时它说我在第 2 行。
更新: 我想我会尝试向处理程序函数添加一个等待,但它所做的只是强制事件等待直到处理程序被执行。我正在开发的另一个功能也需要反转 event/handler 优先级,所以我真的希望有人知道如何做到这一点。
我使用线程解决了这个问题。
绑定到小部件的函数包含一个线程到另一个处理行号的函数。现在,当我在第 1 行并按回车键时,它会显示第 2 行。然后我按退格键,它会正常显示第 1 行。线程允许事件在函数之前发生,这正是我想要的。
我有一个文本框小部件,它有 2 个事件绑定,如下所示:
F2_text_editor.bind('<Return>', lambda e: on_key_release())
F2_text_editor.bind("<BackSpace>", lambda e: on_key_release(), add="+")
我正在为我的文本编辑器添加行号。到目前为止一切都很好,但我遇到的最后一个问题不是我认为可以解决的问题吗?
基本上发生的事情是,当我按下键盘上的任一绑定键时,它会执行功能,然后从键盘本身完成操作。
例如,假设我有一个绑定和一个打印消息的函数。 当我点击 Return 时,它会打印出消息,然后将光标移动到下一行。 有没有办法扭转这种局面?
这里是代码:
def on_key_release():
print("on_key_release")
#F2_line_numbers.delete("1.0", "end")
final_index = str(F2_text_editor.index("end-1c"))
print(f"final_index: {final_index}")
num_of_lines = final_index.split('.')[0]
print(f"num_of_lines: {num_of_lines}")
line_numbers_string = "\n".join(str(no + 1) for no in
range(int(num_of_lines)))
#print(f"line_numbers_string: {line_numbers_string}")
width = len(str(num_of_lines))
#print(f"width: {width}")
F2_line_numbers.configure(state='normal', width=width)
F2_line_numbers.delete("1.0", "end")
F2_line_numbers.insert("1.0", line_numbers_string)
F2_line_numbers.configure(state='disabled')
我需要反转 'event/handler' 优先级的原因是,例如当我在第 1 行并点击 Return 时,该函数在我在线时打印出 'index 1.0 / num of line: 1' 2. 然后我按退格键,当我在第 1 行时它说我在第 2 行。
更新: 我想我会尝试向处理程序函数添加一个等待,但它所做的只是强制事件等待直到处理程序被执行。我正在开发的另一个功能也需要反转 event/handler 优先级,所以我真的希望有人知道如何做到这一点。
我使用线程解决了这个问题。
绑定到小部件的函数包含一个线程到另一个处理行号的函数。现在,当我在第 1 行并按回车键时,它会显示第 2 行。然后我按退格键,它会正常显示第 1 行。线程允许事件在函数之前发生,这正是我想要的。