我有一个问题,我在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()
答案 0 :(得分:1)
这是因为你的自定义绑定在tkinter有机会插入角色之前触发。当您按某个键时,首先发生的事情是在任何其他绑定之前触发您的自定义绑定。该角色尚未插入。
有关如何处理关键事件的完整说明,请参阅以下答案:https://stackoverflow.com/a/11542200/7432
一个简单的解决方法是绑定<KeyRelease>
而不是<Key>
。由于默认行为发生在按下(但在自定义行为之后),因此在将字符插入窗口小部件后,将保证对密钥释放的绑定运行。