Расчет во втором окне TKinter
При нажатии на кнопку на главном окне, открывается второе. Во втором нужно несколько форм для ввода чисел и действия над ними (сложить например) Не получается задать переменные во втором окне и формулу, при нажатии на кнопку, для расчета. Код:
from tkinter import *
import tkinter as tk
from tkinter import messagebox
# functions:
def glue():
# messagebox.showinfo("title", "Нажато")
glue_window = tk.Toplevel()
glue_window.title('Расчёт клея')
glue_window.geometry("600x300")
glue_window.iconbitmap('E:\Projects PyCharm\calculator\ico\calc.ico')
label = tk.Label(glue_window, text = "Введите значение 1: ")
label.grid(column=0, row=0)
label = tk.Label(glue_window, text="Введите значение 2: ")
label.grid(column=0, row=1)
label = tk.Label(glue_window, text="Введите значение 3: ")
label.grid(column=0, row=2)
def count():
messagebox.showinfo("title", "Получилось: ", )
# var's:
a = DoubleVar()
b = DoubleVar()
c = DoubleVar()
# ============
one_entry = Entry(glue_window, )
one_entry.grid(row=0, column=1)
two_entry = Entry(glue_window, )
two_entry.grid(row=1, column=1)
two_entry = Entry(glue_window, )
two_entry.grid(row=2, column=1)
count = Button(glue_window, text="Расчитать", command = count)
count.grid(column=0, row=5)
label = tk.Label(glue_window, text="кв.м")
label.grid(column=4, row=0)
# main window settings:
root = Tk()
root.resizable(width = False, height = False)
root.geometry("600x100")
root.iconbitmap('E:\Projects PyCharm\calculator\ico\calc.ico')
root.title("Подсчет стройматериалов")
# elements:
glue = Button(root, text="Расчет клея", command = glue)
glue.grid(column=1, row=0)
penoblock = Button(root, text="Расчет пеноблоков", )
penoblock.grid(column=2, row=0)
root.mainloop()
Ответы (1 шт):
У вас переменные a, b, c никак не используются. Более того, в данном случае они не нужны, т.к. Entry не поддерживает привязку переменных. Нужно брать значение из самих текстовых полей, приводить к float, потом уже с этим значением работать.
И еще нужно понимать, что messagebox.showinfo не работает как print, ему нужно ровно 2 параметра всегда, а print может принимать произвольное количество параметров. Поэтому нужно все собирать в одну строку, и выводить вторым параметром.
Пример:
one_entry = Entry(glue_window)
one_entry.grid(row=0, column=1)
two_entry = Entry(glue_window)
two_entry.grid(row=1, column=1)
three_entry = Entry(glue_window)
three_entry.grid(row=2, column=1)
def count():
result = float(one_entry.get()) + float(two_entry.get()) + float(three_entry.get())
messagebox.showinfo("title", f"Получилось: {result}")
Про f-строки вкратце: Форматирование строк с помощью f-strings