更新变量并计算逆

Update variable and calculate inverse

我有一个应用程序,其中有两个 tkEntry 小部件。我正在尝试将数据输入第一个并将其填充到第二个中。然而,有时将数据输入第二个并计算第一个更容易。 例如: 如果 EntryOne=20,则 EntryTwo=0.05。 但如果 EntryTwo=0.2,则 EntryOne=5。 我有两个用于计算逆函数的回调,但似乎只有第一个触发。 我可以只有一个回调吗?

import tkinter as tk


root= tk.Tk()
root.title('XXX')
X_var = tk.DoubleVar()
Y_var = tk.DoubleVar()

def cleardata(Box):
    Box.Delete(0,10)
    
def callback_X():
    if not Y_var.get()==0:
        X_var.set(1/Y_var.get())
        X_Ent['validate']='focusout'
        
    return True
            
def callback_Y():
    if not X_var.get()==0:
        Y_var.set(1/X_var.get())
        Y_Ent['validate']='focusout'
    return True

w=200
h=300
root.geometry(str(w)+"x"+str(h))
canvas = tk.Canvas(root, width = w, height = h)
canvas.pack(fill="both", expand=True)


X_lbl=tk.Label(root, text='X').place(x=68.5-25,y=(h/3))
X_Ent = tk.Entry(root, justify="center", textvariable=X_var, width=10, validate="focusout", validatecommand=None)
X_Ent['validatecommand']=callback_Y
X_Ent.place(x=68.5,y=(h/3))


Y_lbl=tk.Label(root, text='Y').place(x=68.5-25,y=(2*h/3))
Y_Ent = tk.Entry(root, justify="center", textvariable=Y_var, width=10, validate="focusout", validatecommand=None)
Y_Ent['validatecommand']=callback_X
Y_Ent.place(x=68.5,y=(2*h/3))

#def main():
root.mainloop()

星期一

我认为您的问题可能是在您定义的第一个函数中,“Def”中的“D”在不应该大写的时候被大写了。

好的,首先,由于多种原因,您在此处发布的代码无法正常工作,但在修复此错误后,我发现您的回调函数无法正常工作的原因是发送至 [=11= 的方法] 必须 return 对或错。我已经完成并为我工作:

import tkinter as tk

root=tk.Tk()
X_var=tk.DoubleVar(value=1)
Y_var=tk.DoubleVar(value=1)

def callback_X():
    if not Y_var.get()==0:
        X_var.set(1/Y_var.get())
        X_entry['validate']='focusout'
    return True

def callback_Y():
    if not X_var==0:
        Y_var.set(1/X_var.get())
        Y_entry['validate']='focusout'
    return True

X_entry=tk.Entry(root, textvariable=X_var, validate='focusout',validatecommand=None)
Y_entry=tk.Entry(root, textvariable=Y_var, validate='focusout',validatecommand=None)
X_entry['validatecommand']=callback_Y
Y_entry['validatecommand']=callback_X

X_entry.pack()
Y_entry.pack()

root.mainloop()