Python — я хочу, чтобы два виджета ввода суммировались без использования кнопки

#python #tkinter #tkinter-entry

#python #tkinter #tkinter-запись

Вопрос:

Я не понимаю, как это сделать. Мне нужно суммировать две записи, а затем поместить сумму в другой виджет ввода без каких-либо кнопок.

Пример один

 from tkinter import *
def sum():
a=float(t1.get())
b=float(t2.get())
c=a b
t3.insert(0,c)
win=Tk()
win.geometry('850x450')

l1=Label(win,text="First Number")
l1.grid(row=0,column=0)
t1=Entry(win)
t1.grid(row=0,column=1)

l2=Label(win,text="Second Number")
l2.grid(row=1,column=0)
t2=Entry(win)
t2.grid(row=1,column=1)

l3=Label(win,text="Result")
l3.grid(row=2,column=0)
t3=Entry(win)
t3.grid(row=2,column=1)

b1=Button(win,text="Click For SUM",command=sum)
b1.grid(row=3,column=1)

win.mainloop()
  

Я надеюсь, что любой сможет справиться с этим..

Заранее спасибо..

Комментарии:

1. Был бы признателен, если бы вы могли пометить мой как ответ, только если это помогло.

Ответ №1:

Возможно, вы захотите использовать без каких-либо кнопок bind . Поэтому попробуйте сказать это в конце вашего кода.

 t2.bind('<Return>',sum)
  

и измените функцию на:

 def sum(event):
..... #same code
  

Теперь вы можете удалить свою кнопку, и когда вы нажмете клавишу Ввода во втором виджете ввода, она вызовет sum() , а затем вставит вывод в виджет третьего ввода.

Дополнительные советы:

  • Я рекомендую изменить имя функции с sum на что-то другое, поскольку sum является встроенной функцией Python.
  • Вы также можете добавить дополнительный bind лайк, t1.bind('Return',lambda event:t2.focus_force()) поэтому, когда пользователь нажимает клавишу ввода в первой записи, они перейдут к виджету следующей записи (так же, как клавиша табуляции).

Надеюсь, это помогло, если есть сомнения, дайте мне знать.

Приветствия

Ответ №2:

Вы можете запустить функцию, которая регулярно каждую секунду сбрасывает значение третьей записи на сумму первой и второй примерно так-:

 try :
    import tkinter as tk # Python 3
except :
    import Tkinter as tk # Python 2

def update_sum() :
    # Sets the sum of values of e1 and e2 as val of e3
    try :
        sum_tk.set((int(e1_tk.get().replace(' ', ''))   int(e2_tk.get().replace(' ', ''))))
    except :
        pass
    
    root.after(1000, update_sum) # reschedule the event
    return

root = tk.Tk()

e1_tk = tk.StringVar(root) # Initializes a text variable of tk to use to get e1's val.
e2_tk = tk.StringVar(root) # Initializes a text variable of tk to use to get e2's val.
sum_tk = tk.StringVar(root) # Initializes a text variable of tk to use to set e3's val.

# Entries
e1 = tk.Entry(root, textvariable = e1_tk)
e2 = tk.Entry(root, textvariable = e2_tk)
e3 = tk.Entry(root, textvariable = sum_tk)

e1.pack()
e2.pack()
e3.pack()

# Will update the sum every second 1000 ms = 1 second it takes ms as arg.
root.after(1000, update_sum)
root.mainloop()
  

Вы можете настроить задержку между обновлениями по своему усмотрению.