gpt4 book ai didi

python - 让一个条目影响另一个条目的值,反之亦然

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:01 25 4
gpt4 key购买 nike

我是使用 Tkinter 的新手(今天才开始使用),我按照一个工作示例制作了一个带有从摄氏度到华氏度的按钮的转换器,但是现在我正在尝试修改它作为练习,以便在其中输入值box 将在另一个 box 中输出相反的内容。

例如,值 10.30 应在华氏度输入框中输出 50.54,或者输入 32.0 到华氏度框应在摄氏度框中输出 0.0 作为实时更新。这是我目前使用的代码,但不是以最佳方式运行:

from tkinter import *

class App:

def __init__(self, master):

frame = Frame(master)
frame.pack()

labelCelsius = Label(frame, text="Celsius")
labelCelsius.grid(row=0, column=0)

labelFahrenheit = Label(frame, text="Fahrenheit")
labelFahrenheit.grid(row=1, column=0)

self.celsius = DoubleVar()
self.celsius.trace("w", self.C2F)
entryCelsius = Entry(frame, textvariable=self.celsius)
entryCelsius.grid(row=0, column=1)

self.fahrenheit = DoubleVar()
self.fahrenheit.trace("w", self.F2C)
entryFahrenheit = Entry(frame, textvariable=self.fahrenheit)
entryFahrenheit.grid(row=1, column=1)

def C2F(self, *args):
IN = self.celsius.get()
self.fahrenheit.set(1.8 * IN + 32)

def F2C(self, *args):
IN = self.fahrenheit.get()
self.celsius.set((IN-32)/1.8)

root = Tk()
root.wm_title("Temperature converter")
app = App(root)
root.mainloop()

这似乎创建了一个无限循环,其中摄氏度更新华氏度,然后华氏度更新摄氏度,反之亦然。

本质上,如果输入摄氏度条目,华氏度应该修改,但不应修改摄氏度 - 反之亦然。

谢谢你的帮助:)

最佳答案

其中一种方法是,您可以删除 trace,然后在设置值后将其添加回去。

def __init__(self, master):
...
...
self.celsius = DoubleVar()
self.celsius.trace_id = self.celsius.trace("w", self.C2F) #keep the trace_id
...
...
self.fahrenheit = DoubleVar()
self.fahrenheit.trace_id = self.fahrenheit.trace("w", self.F2C) #keep the trace_id

def C2F(self, *args):
IN = self.celsius.get()
self.fahrenheit.trace_vdelete("w", self.fahrenheit.trace_id) #remote the trace
self.fahrenheit.set(1.8 * IN + 32)
self.fahrenheit.trace_id = self.fahrenheit.trace("w", self.F2C) #add it back

def F2C(self, *args):
IN = self.fahrenheit.get()
self.celsius.trace_vdelete("w", self.celsius.trace_id) #remote the trace
self.celsius.set((IN-32)/1.8)
self.celsius.trace_id = self.celsius.trace("w", self.C2F) #add it back

关于python - 让一个条目影响另一个条目的值,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54104520/

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