更新变量并计算逆
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()
我有一个应用程序,其中有两个 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()