为什么tkinter文本小部件的第一个字母不能像预期的那样正确?

2024-04-16 08:20:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我在tkinter框架中创建了一个文本小部件,当用户键入时,它应该将文本放在第一行的中心。它做到了这一点,除了第一个字母,他们键入它调整它的左边,然后在第二个字母被按下后,它调整的中心,如预期的。你知道吗

我想知道如何解决这个问题,使第一行保持居中。你知道吗

以下是我目前得到的代码:

import Tkinter as tk

def testing(event=None, text=None):
    LineNumber = text.index(tk.INSERT) # returns line number

    if "1." in LineNumber:
        text.tag_add("center", "1.0", "end")

root = tk.Tk()

F1 = tk.Frame(root, bg="blue", width=300, height=300)
F1.pack()

text = tk.Text(F1, padx=5, pady=10, bg="white")
text.tag_configure("center", justify='center')
text.pack(expand=1, fill="both")

text.bind('<Key>', lambda event: testing(None, text))

root.mainloop()

Tags: text文本noneevent键入tag字母root
1条回答
网友
1楼 · 发布于 2024-04-16 08:20:46

这是因为您的自定义绑定在tkinter有机会插入角色之前触发。当您按下一个键时,发生的第一件事是在任何其他绑定之前触发您的自定义绑定。字符尚未插入。你知道吗

有关如何处理关键事件的完整解释,请参见以下答案:https://stackoverflow.com/a/11542200/7432

一个简单的修复方法是在<KeyRelease>而不是<Key>上绑定。由于默认行为发生在按下按钮时(但是您的自定义行为之后),因此在将字符插入小部件后,将保证在释放键时运行绑定。你知道吗

相关问题 更多 >