python - 直接处理 Tkinter Entry 输入而不使用 Button?

标签 python tkinter tkinter-entry

我正在使用 tkinter 模块编写一些 GUI 代码。 我的问题是我想读取条目输入,而不单击按钮。 这样条目输入将自动写入 .txt 文件。 例如: 如果我输入 'a' ,文本文件应附加字符 'a'

import tkinter as tk

def writefile():
    with open("/home/max/writeThings/name.txt", "a+") as f:
        f.writelines(name.get())
        print("File has been written !")
        root.update()
root = tk.Tk()

canvas = tk.Canvas(root,width = 800, height = 600)
canvas.pack()

frame = tk.Frame(root, bg = "yellow")
frame.place(relwidth = 1, relheight = 1)


name = tk.StringVar()

entry = tk.Entry(frame, textvariable = name, bg = "orange", font= "arial 18 ", justify = "center", fg = "black")
entry.place( relx = 0.25, rely = 0.05, relwidth = 0.5, relheight = 0.1)
entry.focus_set()

writefile()

root.mainloop()

最佳答案

如果您希望在 Entry 小部件的内容发生更改时执行某些操作,最常见的解决方案是将 tkinter 变量与该条目相关联,然后在该变量上进行跟踪 --每当变量发生变化时,跟踪就可以调用函数。

例如,在创建 name 变量后添加此行:

name.trace("w", writefile)

这将导致每当值发生变化时调用writefile

当跟踪调用该函数时,它将传递几个变量。您的函数不使用变量,但需要接受它们,因此将函数签名修改为如下所示:

def writefile(*args):

有关这些参数的更多信息,请参阅 What are the arguments to Tkinter variable trace method callbacks?

最后,如果您希望文件反射(reflect)条目小部件中的内容(而不是每次修改 Entry 时添加新行),则需要更改 的模式open 语句为 w 而不是 a+,以便每次调用时都会用新值覆盖文件。

最终的函数应该如下所示:

def writefile(*args):
    with open("/home/max/writeThings/name.txt", "w") as f:
        f.writelines(name.get())
        print("File has been written !")

注意:在此函数内调用 root.update() 是完全没有意义的,因为一旦函数返回,tkinter 就会自动更新。

关于python - 直接处理 Tkinter Entry 输入而不使用 Button?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56585012/

相关文章:

以 None 作为索引的 Python/Numpy 数组

python - 如何检查在 Tk/Tkinter 程序启动期间是否按住 Shift?

python - 多个 Ttk 条目小部件导致语法错误

python - 使用Selenium后如何使用BeautifulSoup导航到页面

python - 如何从 PyYAML 异常中获取详细信息?

python - 如何使用 python-crontab 模块附加 crontab 条目?

python - 如何在 Tkinter TkTable 中插入/设置数据

python - 无法在鼠标悬停时更改 tkinter Canvas 背景颜色?

python - 是否可以在 Tkinter 下拉菜单中获取用户文本输入?如果是这样,怎么办?

python - 如何从命令中识别按钮?