Выполнение математической функции на 2-й странице Tkinter

#python #tkinter

#python #tkinter

Вопрос:

Мой вопрос в том, как выполнить математическую функцию на странице 2. В кадре 2 получите входные данные из entry_1 и entry_2 , нажмите ADDSUBкнопку или, чтобы выполнить функцию добавления или вычитания соответственно. Затем отобразите результат в entry_3 insert функции with.

 from tkinter import *
from functools import partial

def raise_frame(frame):
    frame.tkraise()

win = Tk()
win.geometry("400x300 10 10")
win.title("Calculator")

second_frame = Frame(win)
second_frame.place(x=0, y=0, width=400, height=300)

first_frame = Frame(win)
first_frame.place(x=0, y=0, width=400, height=300)

label_0 = Label(first_frame, text="CHOOSE NUMBER OF INPUT",width=30,font=("bold", 12))
label_0.place(x=60,y=50)

Button(first_frame, text='2 inputs',width=10,font=("bold", 10),bg='yellow',fg='black', 
command=lambda:raise_frame(second_frame)).place(x=155,y=150)

Button(second_frame, text="Back to Front Page",width=18,bg='brown',fg='white', 
command=lambda:raise_frame(first_frame)).place(x=20,y=260)

label_1 = Label(second_frame, text="Digit 1",width=10,font=("bold", 10))
label_1.place(x=100, y=50)

entry_1 = Entry(second_frame)
entry_1.place(x=200,y=50)

label_2 = Label(second_frame, text="Digit 2",width=10,font=("bold", 10))
label_2.place(x=100,y=100)
    #RT = get()(second_frame, entry1, entry2.get())

entry_2 = Entry(second_frame)
entry_2.place(x=200,y=100)

label_3 = Label(second_frame, text="Result",font=("bold", 10))
label_3.place(x=100,y=200)

entry_3 = Entry(second_frame)
entry_3.place(x=200,y=200)
RT = (entry_1,get()   entry_2,get())
entry_3.second_frame, insert(END, str(RT))

Button(second_frame, text='ADD',width=10,bg='blue',fg='black').place(x=100,y=150)
#second_frame.entry1, R1 = int(get())

   #entry_2.delete(0,END)
   #R1=int(entry_1.get())
   #R2=int(entry_2.get())
   #RT= R1   R2
   #entry_3.insert(END, str(RT))

Button(second_frame, text='SUB',width=10,bg='blue',fg='black').place(x=200,y=150)

win.mainloop()
  

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

1. Что такое «2-я страница»? Похоже, в вашем приложении нет страниц. В этом коде много ошибок, включая синтаксические ошибки.

2. Вам нужно назначить обратные ADD SUB вызовы кнопкам и и выполнить математическую операцию внутри обратных вызовов.

Ответ №1:

Вам нужно назначить обратные ADDSUBвызовы кнопкам и и выполнить математическую операцию внутри обратных вызовов:

 def do_add():
    entry_3.delete(0, 'end')
    try:
        v1 = float(entry_1.get().strip())
        v2 = float(entry_2.get().strip())
        entry_3.insert('end', v1 v2)
    except ValueError:
        entry_3.insert('end', 'Invalid values')

def do_sub():
    entry_3.delete(0, 'end')
    try:
        v1 = float(entry_1.get().strip())
        v2 = float(entry_2.get().strip())
        entry_3.insert('end', v1-v2)
    except ValueError:
        entry_3.insert('end', 'Invalid values')


Button(second_frame, text='ADD', width=10, bg='blue', fg='black', command=do_add).place(x=100,y=150)
Button(second_frame, text='SUB', width=10, bg='blue', fg='black', command=do_sub).place(x=200,y=150)
  

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

1. Спасибо за ваш ответ acw1668. 🙏

Ответ №2:

Кажется, что вы хотите сделать здесь, это создать две функции для сложения и вычитания двух чисел.

 def add_two_num(num1, num2):
    total = int(num1)   int(num2)
    return total

def sub_two_num(num1, num2):
    total = int(num1) - int(num2)
    return total
  

Затем добавьте аргумент «command» для каждой кнопки, вызывая соответствующую функцию

 Button(second_frame, text='ADD',width=10,bg='blue',fg='black',
   command=lambda: [
   entry_3.delete(0, END), 
   entry_3.insert(END,add_two_num(entry_1.get(),entry_2.get()))
   ]).place(x=100,y=150)

Button(second_frame, text='ADD',width=10,
   bg='blue',fg='black',command=lambda: [
   entry_3.delete(0, END),
   entry_3.insert(END,add_two_num(entry_1.get(),entry_2.get()))
   ]).place(x=100,y=150)
  

Команда lambda сначала удаляет все, что уже находится в entry_3, а затем вычисляет сумму или разницу двух записей, а затем помещает результат в entry_3.

О, и вам следует удалить две строки в вашем коде: RT = (entry_1,get() entry_2,get()) entry_3.second_frame, insert(END, str(RT))

Теперь они не понадобятся и в любом случае вызовут синтаксические ошибки

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

1. Привет, Джаспер, большое спасибо за быстрый ответ. Ваш код работает замечательно🙏. Вы великолепны. Слава богу, я получил решение своей проблемы с кодированием.