#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. Привет, Джаспер, большое спасибо за быстрый ответ. Ваш код работает замечательно🙏. Вы великолепны. Слава богу, я получил решение своей проблемы с кодированием.