我正在尝试根据彼此的输入使 2 个条目显示字符串。例如,如果我在 entry1 中输入 10,则 entry2 显示 10*2,entry2 相同,但 entry1 必须显示 10/2。我试过:
from tkinter import *
from tkinter import ttk
root = Tk()
root.geometry("700x350")
varEntry1=StringVar()
varEntry2=StringVar()
varEntry1.trace('w', lambda name, index, mode, varEntry1=varEntry1: callback(varEntry1))
varEntry2.trace('w', lambda name, index, mode, varEntry2=varEntry2: callback2(varEntry2))
entry1 = ttk.Entry(root,textvariable=varEntry1)
entry2 = ttk.Entry(root,textvariable=varEntry2)
def callback(varEntry1):
print (varEntry1.get())
entry2.delete(0,END)
entry2.insert(0,float(varEntry1.get())*2)
def callback2(varEntry2):
print (varEntry2.get())
entry1.delete(0,END)
entry1.insert(0,float(varEntry2.get())/2)
entry1.pack()
entry2.pack()
但似乎条目跟踪相互混淆,并且在我键入第二个符号后输入被删除。然后我尝试创建一个函数,该函数将在单击 entry1 时禁用 entry2 的跟踪,但它没有用。有没有更优雅的方法来实现这一目标?
这是一种方法:
from tkinter import *
from tkinter import ttk
root = Tk()
root.geometry("700x350")
varEntry1=StringVar()
varEntry2=StringVar()
entry1 = ttk.Entry(root,textvariable=varEntry1)
entry2 = ttk.Entry(root,textvariable=varEntry2)
def callback(event): ### EDITED LINE
print(varEntry1.get())
entry2.delete(0,END)
entry2.insert(0,float(varEntry1.get())*2)
def callback2(event): ### EDITED LINE
print(varEntry2.get())
entry1.delete(0,END)
entry1.insert(0,float(varEntry2.get())/2)
entry1.bind("<Return>", callback) ### ADDED LINE
entry2.bind("<Return>", callback2) ### ADDED LINE
entry1.pack()
entry2.pack()
root.mainloop()
这使用了bind()
条目的功能,因此只要用户在输入条目后点击 Enter,它就会执行计算。这样,您可以在计算之前键入任意大小的数字。
如果您想在仍然使用该trace()
功能的同时执行此操作,您可以让它在用户点击某个键时执行计算,例如:
:
from tkinter import *
from tkinter import ttk
root = Tk()
root.geometry("700x350")
varEntry1=StringVar()
varEntry2=StringVar()
varEntry1.trace('w', lambda name, index, mode, varEntry1=varEntry1: callback(varEntry1))
varEntry2.trace('w', lambda name, index, mode, varEntry2=varEntry2: callback2(varEntry2))
entry1 = ttk.Entry(root,textvariable=varEntry1)
entry2 = ttk.Entry(root,textvariable=varEntry2)
def callback(varEntry1):
if ":" in varEntry1.get():
entry2.delete(0,END)
entry2.insert(0,float(varEntry1.get().replace(":", ""))*2)
def callback2(varEntry2):
if ":" in varEntry2.get():
entry1.delete(0,END)
entry1.insert(0,float(varEntry2.get().replace(":", ""))/2)
entry1.pack()
entry2.pack()
root.mainloop()
您可以使用任何字符代替:
,(我不建议使用.
, 但是 :-))。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句