gpt4 book ai didi

python - 如何在 Tkinter 中按下 Tab 键后捕获文本小部件的值?

转载 作者:太空宇宙 更新时间:2023-11-03 17:26:59 25 4
gpt4 key购买 nike

我有一个示例脚本(如下所示),其中我只是尝试在每次按下“Tab”键时捕获 tkinter 文本小部件的值。有两个函数可以帮助实现这一点。在选项卡更改值之前,应该运行并显示文本小部件的值。在选项卡更改值后,另一个函数应该运行并显示文本小部件的值。

问题:

问题是只运行一个函数 - 在选项卡更改其值之前显示文本小部件的值的函数。

我的系统:

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 绑定(bind)由于某种原因不起作用。但是,如果我更改 <Tab> 的绑定(bind)至<Key>然后,当我在文本小部件中键入任何键时,display_before_value()display_after_value() 都可以正确运行(当然 Tab 键除外)。

提前致谢

最佳答案

如果您希望文本显示在制表符空间之前,并且文本显示在制表符空间之后,请尝试使用 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 函数,该函数显示文本小部件的值,包括制表符空间。

关于python - 如何在 Tkinter 中按下 Tab 键后捕获文本小部件的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32426065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com