为什么tkinter文本小部件的首字母不符合预期?

时间:2017-04-14 21:45:55

标签: python python-2.7 user-interface tkinter

我有一个问题,我在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()

1 个答案:

答案 0 :(得分:1)

这是因为你的自定义绑定在tkinter有机会插入角色之前触发。当您按某个键时,首先发生的事情是在任何其他绑定之前触发您的自定义绑定。该角色尚未插入。

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

一个简单的解决方法是绑定<KeyRelease>而不是<Key>。由于默认行为发生在按下(但自定义行为之后),因此在将字符插入窗口小部件后,将保证对密钥释放的绑定运行。