gpt4 book ai didi

更改条目时 Python Tkinter 更新

转载 作者:行者123 更新时间:2023-11-28 21:56:13 26 4
gpt4 key购买 nike

我正在尝试用 python 制作一个简单的温度转换计算器。我想要做的是能够输入一个数字,让对方自动更新,而无需按下按钮。现在我只能让它朝一个方向工作。我可以对它进行编码,使其可以从 F 到 C,或从 C 到 F。但两种方式都不行。

显然 after 不是要走的路。我需要某种 onUpdate 之类的东西。 TIA!

import Tkinter as tk

root = tk.Tk()
temp_f_number = tk.DoubleVar()
temp_c_number = tk.DoubleVar()

tk.Label(root, text="F").grid(row=0, column=0)
tk.Label(root, text="C").grid(row=0, column=1)

temp_f = tk.Entry(root, textvariable=temp_f_number)
temp_c = tk.Entry(root, textvariable=temp_c_number)

temp_f.grid(row=1, column=0)
temp_c.grid(row=1, column=1)

def update():
temp_f_float = float(temp_f.get())
temp_c_float = float(temp_c.get())

new_temp_c = round((temp_f_float - 32) * (5 / float(9)), 2)
new_temp_f = round((temp_c_float * (9 / float(5)) + 32), 2)

temp_c.delete(0, tk.END)
temp_c.insert(0, new_temp_c)

temp_f.delete(0, tk.END)
temp_f.insert(0, new_temp_f)

root.after(2000, update)

root.after(1, update)
root.mainloop()

最佳答案

您正在寻找的是变量 trace() 方法。例如:

def callback(*args):
print "variable changed!"

var = DoubleVar()
var.trace("w", callback)

为每个 DoubleVar 附加跟踪回调,对于 temp_f_number 一个更新 temp_c_number 值,反之亦然。您可能还需要在另一个回调函数内禁用一个回调函数,以避免递归更新周期。

另一个注意事项 - 不要编辑条目字段。相反,使用变量的 set() 方法。输入字段将自动更新。

因此,完整的代码可能如下所示:

import Tkinter as tk

root = tk.Tk()
temp_f_number = tk.DoubleVar()
temp_c_number = tk.DoubleVar()

tk.Label(root, text="F").grid(row=0, column=0)
tk.Label(root, text="C").grid(row=0, column=1)

temp_f = tk.Entry(root, textvariable=temp_f_number)
temp_c = tk.Entry(root, textvariable=temp_c_number)

temp_f.grid(row=1, column=0)
temp_c.grid(row=1, column=1)

update_in_progress = False

def update_c(*args):
global update_in_progress
if update_in_progress: return
try:
temp_f_float = temp_f_number.get()
except ValueError:
return
new_temp_c = round((temp_f_float - 32) * 5 / 9, 2)
update_in_progress = True
temp_c_number.set(new_temp_c)
update_in_progress = False

def update_f(*args):
global update_in_progress
if update_in_progress: return
try:
temp_c_float = temp_c_number.get()
except ValueError:
return
new_temp_f = round(temp_c_float * 9 / 5 + 32, 2)
update_in_progress = True
temp_f_number.set(new_temp_f)
update_in_progress = False

temp_f_number.trace("w", update_c)
temp_c_number.trace("w", update_f)

root.mainloop()

关于更改条目时 Python Tkinter 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21837168/

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