библиотека TKinter

Nika

Новичок
Пользователь
Ноя 1, 2021
7
0
1
Python 3.8.6

Здравствуйте! Мне нужен графический интерфейс, который принимал бы от пользователя значения ВЕС, РОСТ, ВОЗРАСТ, ПОЛ(Ж или М), КОЭФФИЦИЕНТ АКТИВНОСТИ(1.2 ИЛИ 1.4 ИЛИ 1.9), ЦЕЛЬ(1 ИЛИ 2 ИЛИ 3). Затем эти значения будут использоваться в 6-ти других функциях в качестве входных параметров (пример одной из них: вычисление нормы калорий в день для человека с полученными параметрами), каждая из этих функций в моём понимании должна быть кнопочкой в интерфейсе пользователя.

Я организовала часть интерфейса (код прикрепила), где происходит ввод данных от пользователя. Рядом с каждым полем расположена кнопочка, которая должна извлекать значение из поля. Проблема состоит в том, что приложение работает только со значениями, которые установлены для поля ввода по умолчанию. На данные, вводимые пользователем в интерфейсе, оно не обращает внимания и вообще завершает работу еще до того, как пользователь введёт свои данные.

Подскажите, пожалуйста, как правильно реализовать то, что я задумала. Первый раз использую графический интерфейс.
Заранее благодарю за помощь и развёрнутый ответ.

Python:
#графический интерфейс
from tkinter import *

# win = Tk()
# win.title(" Сбалансированное пиание ")
# win.config(width=1000, height=1000)
#
# # ф-ция ввода веса
# def EnterW():
#     weight = int(ent.get())
#     lab2.configure(text="Вы ввели : " + str(weight))
#     return weight
#
#
# lab1 = Label(win, text="Введите Ваш вес :").pack()
#
# ent = Entry(win, bd=2).pack()
# ent.insert(0, "10")
# lab2 = Label(win, text="Ваш вес = ").pack()
# but1 = Button(win, text="OK", command=lambda :EnterW).pack()
#
# weight = EnterW()
#
#
# # ф-ция ввода роста
# def EnterHeight():
#     height = int(entr.get())
#     lab4.configure(text="Вы ввели : " + str(height))
#     return height
#
#
# lab3 = Label(win, text="Введите Ваш рост :").pack()
# entr = Entry(win, bd=2).pack()
# # entr.insert(0, "170")
#
# lab4 = Label(win, text="Ваш рост = ")
# lab4.pack()
#
# but3 = Button(win, text="OK", command=lambda :EnterHeight)
# but3.pack()
#
# height = EnterHeight()
#
#
# # возраст
# def EnterAge():
#     age = int(entv.get())
#     lab6.configure(text="Вы ввели : " + str(age))
#     return age
#
#
# lab5 = Label(win, text="Введите Ваш возраст :")
# lab5.pack()
#
# entv = Entry(win, bd=2)
# entv.pack()
# entv.insert(0, "20")
#
# lab6 = Label(win, text="Ваш возраст = ")
# lab6.pack()
#
# but5 = Button(win, text="OK", command=lambda :EnterAge)
# but5.pack()
#
# age = EnterAge()
# print(age)
#
#
# # пол
# def EnterGender():
#     gender = entp.get()
#     #lab8.configure(text="Вы ввели : " + gender)
#     return gender
#
#
# lab7 = Label(win, text="Введите Ваш пол (М/Ж) :")
# lab7.pack()
#
# entp = Entry(win, bd=2)
# entp.pack()
# entp.insert(0, "Ж")
#
# lab8 = Label(win, text="Ваш пол = ").pack()
# but7 = Button(win, text="OK", command=lambda: EnterGender).pack()
#
#
# gender = EnterGender()
#
#
# # коэффициент
# def EnterKf():
#     Kf = float(entk.get())
#     lab10.configure(text="Вы ввели : " + str(Kf))
#     return Kf
#
#
# lab9 = Label(win, text="Введите коэффициент :")
# lab9.pack()
#
# entk = Entry(win, bd=2)
# entk.pack()
# entk.insert(0, "1.9")
#
# lab10 = Label(win, text="Коэффициент ")
# lab10.pack()
#
# but9 = Button(win, text="OK", command=EnterKf)
# but9.pack()
#
# Kf = EnterKf()
#
#
# # цель
# def ClearMission():
#     entt.delete(0, END)
#
#
# def EnterMission():
#     mission = float(entt.get())
#     lab12.configure(text="Вы ввели : " + str(mission))
#     return mission
#
#
# lab9 = Label(win, text="Введите Вашу цель (1,2,3):")
# lab9.pack()
#
# entt = Entry(win, bd=2)
# entt.pack()
# entt.insert(0, "3")
#
# lab12 = Label(win, text="Цель ")
# lab12.pack()
#
# but11 = Button(win, text="OK", command=lambda:  EnterMission)
# but11.pack()
#
#
#
# win.mainloop()

# расчет рекомендуемой нормы ккал,
#это одна из 6-ти функций, где будeт использоваться введенные пользователем данные

def rKKal(gender, Kf, weight, height, age):
    kkal = 0
    if (gender == "М"):
        kkal = Kf * (66.5 + 13.75 * weight + 5.003 * height - 6.775 * age)
    elif (gender == "Ж"):
        kkal = Kf * (665.1 + 9.563 * weight + 1.85 * height - 4.676 * age)
    else:
        print("неправильно введён пол")
    return kkal
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 677
479
83
первая ваша проблема в том, что вы делаете поле ввода и замщение виджета в одну строку, вот так напримерentr = Entry(win, bd=2).pack(), потом вы пытаетесь обратиться к этому полю через метод get, но получаете ошибку, потому что вы обращаетесь уже не к полю, а к объекту который вернула функция pack(), она ничего не возвращает, то есть None, разделяйте эти действия
Python:
...

entr = Entry(win, bd=2)
entr.pack()

...


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

height = 0
def EnterHeight():
    height = int(entr.get())
    lab4.configure(text="Вы ввели : " + str(height))
    print(f"Рост {height}")

...


полный код, сильно ничего не исправлял
Python:
#графический интерфейс
from tkinter import *

win = Tk()
win.title(" Сбалансированное питание ")
win.config(width=1000, height=1000)


########################################################
# Вес
weight = 0
def EnterW():
    weight = int(ent.get())
    lab2.configure(text="Вы ввели : " + str(weight))
    print(f"Вес {weight}")


lab1 = Label(win, text="Введите Ваш вес :").pack()
ent = Entry(win, bd=2)
ent.pack()
ent.insert(0, "10")
lab2 = Label(win, text="Ваш вес = ")
lab2.pack()
but1 = Button(win, text="OK", command=EnterW).pack()
########################################################


########################################################
# Рост
height = 0
def EnterHeight():
    height = int(entr.get())
    lab4.configure(text="Вы ввели : " + str(height))
    print(f"Рост {height}")


lab3 = Label(win, text="Введите Ваш рост :")
lab3.pack()
entr = Entry(win, bd=2)
entr.pack()
entr.insert(0, "170")
lab4 = Label(win, text="Ваш рост = ")
lab4.pack()
but3 = Button(win, text="OK", command=EnterHeight)
but3.pack()
########################################################


########################################################
# возраст
age = 0
def EnterAge():
    age = int(entv.get())
    lab6.configure(text="Вы ввели : " + str(age))
    print(f"возраст {age}")


lab5 = Label(win, text="Введите Ваш возраст :")
lab5.pack()
entv = Entry(win, bd=2)
entv.pack()
entv.insert(0, "20")
lab6 = Label(win, text="Ваш возраст = ")
lab6.pack()
but5 = Button(win, text="OK", command=EnterAge)
but5.pack()
########################################################


########################################################
# пол
gender = 0
def EnterGender():
    gender = entp.get()
    lab8.configure(text="Вы ввели : " + gender)
    print(f"пол {gender}")


lab7 = Label(win, text="Введите Ваш пол (М/Ж) :")
lab7.pack()
entp = Entry(win, bd=2)
entp.pack()
entp.insert(0, "Ж")
lab8 = Label(win, text="Ваш пол = ")
lab8.pack()
but7 = Button(win, text="OK", command=EnterGender).pack()
########################################################


########################################################
# коэффициент
Kf = 0
def EnterKf():
    Kf = float(entk.get())
    lab10.configure(text="Вы ввели : " + str(Kf))
    print(f"коэффициент {Kf}")


lab9 = Label(win, text="Введите коэффициент :")
lab9.pack()
entk = Entry(win, bd=2)
entk.pack()
entk.insert(0, "1.9")
lab10 = Label(win, text="Коэффициент ")
lab10.pack()
but9 = Button(win, text="OK", command=EnterKf)
but9.pack()
########################################################


########################################################
# цель
def ClearMission():
    entt.delete(0, END)

mission = 0
def EnterMission():
    mission = float(entt.get())
    lab12.configure(text="Вы ввели : " + str(mission))
    print(f"цель {mission}")


lab9 = Label(win, text="Введите Вашу цель (1,2,3):")
lab9.pack()
entt = Entry(win, bd=2)
entt.pack()
entt.insert(0, "3")
lab12 = Label(win, text="Цель ")
lab12.pack()
but11 = Button(win, text="OK", command=EnterMission)
but11.pack()
########################################################


win.mainloop()

# расчет рекомендуемой нормы ккал,
#это одна из 6-ти функций, где будeт использоваться введенные пользователем данные

def rKKal(gender, Kf, weight, height, age):
    kkal = 0
    if (gender == "М"):
        kkal = Kf * (66.5 + 13.75 * weight + 5.003 * height - 6.775 * age)
    elif (gender == "Ж"):
        kkal = Kf * (665.1 + 9.563 * weight + 1.85 * height - 4.676 * age)
    else:
        print("неправильно введён пол")
    return kkal
 
  • Мне нравится
Реакции: Nika

Nika

Новичок
Пользователь
Ноя 1, 2021
7
0
1
первая ваша проблема в том, что вы делаете поле ввода и замщение виджета в одну строку, вот так напримерentr = Entry(win, bd=2).pack(), потом вы пытаетесь обратиться к этому полю через метод get, но получаете ошибку, потому что вы обращаетесь уже не к полю, а к объекту который вернула функция pack(), она ничего не возвращает, то есть None, разделяйте эти действия
Python:
...

entr = Entry(win, bd=2)
entr.pack()

...


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

height = 0
def EnterHeight():
    height = int(entr.get())
    lab4.configure(text="Вы ввели : " + str(height))
    print(f"Рост {height}")

...


полный код, сильно ничего не исправлял
Python:
#графический интерфейс
from tkinter import *

win = Tk()
win.title(" Сбалансированное питание ")
win.config(width=1000, height=1000)


########################################################
# Вес
weight = 0
def EnterW():
    weight = int(ent.get())
    lab2.configure(text="Вы ввели : " + str(weight))
    print(f"Вес {weight}")


lab1 = Label(win, text="Введите Ваш вес :").pack()
ent = Entry(win, bd=2)
ent.pack()
ent.insert(0, "10")
lab2 = Label(win, text="Ваш вес = ")
lab2.pack()
but1 = Button(win, text="OK", command=EnterW).pack()
########################################################


########################################################
# Рост
height = 0
def EnterHeight():
    height = int(entr.get())
    lab4.configure(text="Вы ввели : " + str(height))
    print(f"Рост {height}")


lab3 = Label(win, text="Введите Ваш рост :")
lab3.pack()
entr = Entry(win, bd=2)
entr.pack()
entr.insert(0, "170")
lab4 = Label(win, text="Ваш рост = ")
lab4.pack()
but3 = Button(win, text="OK", command=EnterHeight)
but3.pack()
########################################################


########################################################
# возраст
age = 0
def EnterAge():
    age = int(entv.get())
    lab6.configure(text="Вы ввели : " + str(age))
    print(f"возраст {age}")


lab5 = Label(win, text="Введите Ваш возраст :")
lab5.pack()
entv = Entry(win, bd=2)
entv.pack()
entv.insert(0, "20")
lab6 = Label(win, text="Ваш возраст = ")
lab6.pack()
but5 = Button(win, text="OK", command=EnterAge)
but5.pack()
########################################################


########################################################
# пол
gender = 0
def EnterGender():
    gender = entp.get()
    lab8.configure(text="Вы ввели : " + gender)
    print(f"пол {gender}")


lab7 = Label(win, text="Введите Ваш пол (М/Ж) :")
lab7.pack()
entp = Entry(win, bd=2)
entp.pack()
entp.insert(0, "Ж")
lab8 = Label(win, text="Ваш пол = ")
lab8.pack()
but7 = Button(win, text="OK", command=EnterGender).pack()
########################################################


########################################################
# коэффициент
Kf = 0
def EnterKf():
    Kf = float(entk.get())
    lab10.configure(text="Вы ввели : " + str(Kf))
    print(f"коэффициент {Kf}")


lab9 = Label(win, text="Введите коэффициент :")
lab9.pack()
entk = Entry(win, bd=2)
entk.pack()
entk.insert(0, "1.9")
lab10 = Label(win, text="Коэффициент ")
lab10.pack()
but9 = Button(win, text="OK", command=EnterKf)
but9.pack()
########################################################


########################################################
# цель
def ClearMission():
    entt.delete(0, END)

mission = 0
def EnterMission():
    mission = float(entt.get())
    lab12.configure(text="Вы ввели : " + str(mission))
    print(f"цель {mission}")


lab9 = Label(win, text="Введите Вашу цель (1,2,3):")
lab9.pack()
entt = Entry(win, bd=2)
entt.pack()
entt.insert(0, "3")
lab12 = Label(win, text="Цель ")
lab12.pack()
but11 = Button(win, text="OK", command=EnterMission)
but11.pack()
########################################################


win.mainloop()

# расчет рекомендуемой нормы ккал,
#это одна из 6-ти функций, где будeт использоваться введенные пользователем данные

def rKKal(gender, Kf, weight, height, age):
    kkal = 0
    if (gender == "М"):
        kkal = Kf * (66.5 + 13.75 * weight + 5.003 * height - 6.775 * age)
    elif (gender == "Ж"):
        kkal = Kf * (665.1 + 9.563 * weight + 1.85 * height - 4.676 * age)
    else:
        print("неправильно введён пол")
    return kkal

первая ваша проблема в том, что вы делаете поле ввода и замщение виджета в одну строку, вот так напримерentr = Entry(win, bd=2).pack(), потом вы пытаетесь обратиться к этому полю через метод get, но получаете ошибку, потому что вы обращаетесь уже не к полю, а к объекту который вернула функция pack(), она ничего не возвращает, то есть None, разделяйте эти действия
Python:
...

entr = Entry(win, bd=2)
entr.pack()

...


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

height = 0
def EnterHeight():
    height = int(entr.get())
    lab4.configure(text="Вы ввели : " + str(height))
    print(f"Рост {height}")

...


полный код, сильно ничего не исправлял
Python:
#графический интерфейс
from tkinter import *

win = Tk()
win.title(" Сбалансированное питание ")
win.config(width=1000, height=1000)


########################################################
# Вес
weight = 0
def EnterW():
    weight = int(ent.get())
    lab2.configure(text="Вы ввели : " + str(weight))
    print(f"Вес {weight}")


lab1 = Label(win, text="Введите Ваш вес :").pack()
ent = Entry(win, bd=2)
ent.pack()
ent.insert(0, "10")
lab2 = Label(win, text="Ваш вес = ")
lab2.pack()
but1 = Button(win, text="OK", command=EnterW).pack()
########################################################


########################################################
# Рост
height = 0
def EnterHeight():
    height = int(entr.get())
    lab4.configure(text="Вы ввели : " + str(height))
    print(f"Рост {height}")


lab3 = Label(win, text="Введите Ваш рост :")
lab3.pack()
entr = Entry(win, bd=2)
entr.pack()
entr.insert(0, "170")
lab4 = Label(win, text="Ваш рост = ")
lab4.pack()
but3 = Button(win, text="OK", command=EnterHeight)
but3.pack()
########################################################


########################################################
# возраст
age = 0
def EnterAge():
    age = int(entv.get())
    lab6.configure(text="Вы ввели : " + str(age))
    print(f"возраст {age}")


lab5 = Label(win, text="Введите Ваш возраст :")
lab5.pack()
entv = Entry(win, bd=2)
entv.pack()
entv.insert(0, "20")
lab6 = Label(win, text="Ваш возраст = ")
lab6.pack()
but5 = Button(win, text="OK", command=EnterAge)
but5.pack()
########################################################


########################################################
# пол
gender = 0
def EnterGender():
    gender = entp.get()
    lab8.configure(text="Вы ввели : " + gender)
    print(f"пол {gender}")


lab7 = Label(win, text="Введите Ваш пол (М/Ж) :")
lab7.pack()
entp = Entry(win, bd=2)
entp.pack()
entp.insert(0, "Ж")
lab8 = Label(win, text="Ваш пол = ")
lab8.pack()
but7 = Button(win, text="OK", command=EnterGender).pack()
########################################################


########################################################
# коэффициент
Kf = 0
def EnterKf():
    Kf = float(entk.get())
    lab10.configure(text="Вы ввели : " + str(Kf))
    print(f"коэффициент {Kf}")


lab9 = Label(win, text="Введите коэффициент :")
lab9.pack()
entk = Entry(win, bd=2)
entk.pack()
entk.insert(0, "1.9")
lab10 = Label(win, text="Коэффициент ")
lab10.pack()
but9 = Button(win, text="OK", command=EnterKf)
but9.pack()
########################################################


########################################################
# цель
def ClearMission():
    entt.delete(0, END)

mission = 0
def EnterMission():
    mission = float(entt.get())
    lab12.configure(text="Вы ввели : " + str(mission))
    print(f"цель {mission}")


lab9 = Label(win, text="Введите Вашу цель (1,2,3):")
lab9.pack()
entt = Entry(win, bd=2)
entt.pack()
entt.insert(0, "3")
lab12 = Label(win, text="Цель ")
lab12.pack()
but11 = Button(win, text="OK", command=EnterMission)
but11.pack()
########################################################


win.mainloop()

# расчет рекомендуемой нормы ккал,
#это одна из 6-ти функций, где будeт использоваться введенные пользователем данные

def rKKal(gender, Kf, weight, height, age):
    kkal = 0
    if (gender == "М"):
        kkal = Kf * (66.5 + 13.75 * weight + 5.003 * height - 6.775 * age)
    elif (gender == "Ж"):
        kkal = Kf * (665.1 + 9.563 * weight + 1.85 * height - 4.676 * age)
    else:
        print("неправильно введён пол")
    return kkal
Спасибо огромное! Вы мне очень помогли)
 

Форум IT Специалистов