我有一个示例脚本(如下所示),我只是在每次按下“Tab”键时尝试捕获tkinter文本小部件的值。两个函数用于帮助解决这个问题。在Tab更改值之前,应该运行并显示文本小部件的值。应该运行另一个函数,并在Tab更改值后显示文本小部件的值。
问题:
问题是只运行一个函数 - 在选项卡更改其值之前显示文本小部件的值的函数。
我的系统:
Ubuntu 12.04
Python 3.4.3
Tk 8.5
守则:
import tkinter as tk
def display_before_value(value):
"""Display the value of the text widget before the class bindings run"""
print("The (before) value is:", value)
return
def display_after_value(value):
"""Display the value of the text widget after the class bindings run"""
print("The (after) value is:", value)
return
# Add the widgets
root = tk.Tk()
text = tk.Text(root)
# Add "post class" bindings to the bindtags
new_bindings = list(text.bindtags())
new_bindings.insert(2, "post-class")
new_bindings = tuple(new_bindings)
text.bindtags(new_bindings)
# Show that the bindtags were updated
text.bindtags()
# Outputs ('.140193481878160', 'Text', 'post-class', '.', 'all')
# Add the bindings
text.bind("<Tab>", lambda e: display_before_value(text.get("1.0", tk.END)))
text.bind_class("post-class", "<Tab>", lambda e: display_after_value(text.get("1.0", tk.END)))
# Show the text widget
text.grid()
# Run
root.mainloop()
在命令行/终端中运行上述代码只会显示 display_before_value()功能的输出。所以我假设 post-class 绑定由于某种原因不起作用。但是,如果我将绑定从<Tab>
更改为<Key>
,则当我键入任何键时, display_before_value()和 display_after_value()都会正确运行文本小部件(当然除了Tab键)。
提前致谢
答案 0 :(得分:1)
如果要在选项卡空间之前显示文本,并在之后使用选项卡空间显示文本,请尝试使用root.after()。以下是您的代码示例:
import tkinter as tk
def display_before_value(event):
"""Display the value of the text widget before the class bindings run"""
value = text.get("1.0", tk.END)
print("The (before) value is:", value)
root.after(1, display_after_value)
return
def display_after_value():
"""Display the value of the text widget after the class bindings run"""
value = text.get("1.0", tk.END)
print("The (after) value is:", value)
return
# Add the widgets
root = tk.Tk()
text = tk.Text(root)
# Add the bindings
text.bind("<Tab>", display_before_value)
# Show the text widget
text.grid()
# Run
root.mainloop()
当按下Tab键时,将执行display_before_value函数,该函数将打印文本小部件的值,而不包含选项卡空间。在1毫秒之后,它进入display_after_value函数,该函数显示文本小部件的值,包括选项卡空间。