gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:43:15 26 4
gpt4 key购买 nike

我正在使用 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/

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