python забывает переменные, введённые ранее
from tkinter import *
from tkinter import Entry
window = Tk()
window.title("aboba")
window.geometry('800x800')
# МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ МОДУЛЬ
#ПЕРЕМЕННЫЕ
#ПЕРЕМЕННЫЕ
# ФУНКЦИИ
def clicked1():
lbl1.configure(text="Принято!")
v0 = int(txt1.get())
print(v0)
def clicked2():
lbl2.configure(text="Принято!")
g_physic = int(txt2.get())
print(g_physic)
def clicked3():
lbl3.configure(text="Принято!")
hei = int(txt3.get())
print(hei)
# ФУНКЦИИ
# КНОПКИ
lbl1 = Label(window, text="Начальная скорость")
lbl1.place(y=25, x=15)
txt1 = Entry(window, width=10)
txt1.place(y=45, x=19)
btn2 = Button(window, text="ОК", bg="light coral", command=clicked1)
btn2.place(y=44, x=85)
# КНОПКИ
# ТЕКСТ
lbl3 = Label(window, text="Ускорение свободного падения")
lbl3.place(y=125, x=15)
lbl2 = Label(window, text="Высота выстрела")
lbl2.place(y=75, x=15)
txt2 = Entry(window, width=10)
txt2.place(y=95, x=19)
btn = Button(window, text="ОК", bg="light coral", command=clicked2)
btn.place(y=94, x=85)
# ТЕКСТ
# СТРОКИ ВВОДА
txt3 = Entry(window, width=10)
txt3.place(y=145, x=19)
btn = Button(window, text="ОК", bg="light coral", command=clicked3)
btn.place(y=144, x=85)
# СТРОКИ ВВОДА
def graf1():
print(v0, g_physic, hei)
btn1.configure(text='Рассчитано')
f = (v0 ** 2 / (2 * v0 ** 2 + 2 * g_physic * hei))
canv = Canvas(root, width = 1000, height = 1000, bg = "white")
canv.create_line(500,1000,500,0,width=2,arrow=LAST)
canv.create_line(0,500,1000,500,width=2,arrow=LAST)
First_x = -500;
for i in range(16000):
if (i % 800 == 0):
k = First_x + (1 / 16) * i
canv.create_line(k + 500, -3 + 500, k + 500, 3 + 500, width = 0.5, fill = 'black')
canv.create_text(k + 515, -10 + 500, text = str(k), fill="purple", font=("Helvectica", "10"))
if (k != 0):
canv.create_line(-3 + 500, k + 500, 3 + 500, k + 500, width = 0.5, fill = 'black')
canv.create_text(20 + 500, k + 500, text = str(k), fill="purple", font=("Helvectica", "10"))
try:
x = First_x + (1 / 16) * i
new_f = f.replace('x', str(x))
y = -eval(new_f) + 500
x += 500
canv.create_oval(x, y, x + 1, y + 1, fill = 'black')
except:
pass
canv.pack()
btn1 = Button(window, text="Рассчитать", bg="light coral", command=graf1)
btn1.place(y=64, x=95)
mainloop()
После ввода данных в строки ввода txt1, txt2, txt3 данные записываются в переменные v0, g_physic, hei, но при запуске функции graf1 они исчезают.
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
v0, g_physic, hei - это локальные переменные внутри функций. Чтобы они были глобально видимы, внутри функций нужно объявлять их глобальными, прежде чем им что-то присваивать. Например:
def clicked1():
global v0 # переменная v0 теперь будет восприниматься как глобальная
lbl1.configure(text="Принято!")
v0 = int(txt1.get())
print(v0)
При чтении глобальной переменной не нужно делать дополнительных телодвижений, только при её записи внутри функции нужно указывать global.