将 tkinter 条目链接到彼此的输入

塞缪尔·阿里比安

我正在尝试根据彼此的输入使 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章