Форум сайта python.su
привет, подскажите пожалуйста, - есть небольшая программа,(импорт tkinter) в ней есть кнопка по нажатии на которую планировалось вызывать функцию, которая будет перезагружать саму программу.. чтобы после ее нажатия состояние было как при запуске проги, т.е. чтобы всё сбрасывалось . Читал про функцию reload, но она перезагружает только импортированные модули как я понял. Можно это вообще реализовать по простому? чтобы не прописывать сброс каждой переменной по отдельности… Буду благодарен за варианты.
Офлайн
VitEsk ну если втупую то
os.execl(sys.executable, os.path.abspath(__file__), *sys.argv)
[code python][/code]
Офлайн
Понятно, значит легких путей нет..
Офлайн
VitEskПриведенный код перезапустит приложение, ценой будет повторное создание процесса и полная потеря данных (например о положении окна что будет неприятно пользователю).
Понятно, значит легких путей нет..
VitEskЯ вообще не очень понимаю что такое сброс переменной. В языке предусмотрено только присвоение значений.
чтобы не прописывать сброс каждой переменной по отдельности
Офлайн
doza_andпод сбросом переменных я подразумевал их возвращение к значениям по умолчанию. Хотя Возможно это и не критично в данном коде, но всё таки хотелось бы знать как это можно реализовать.
"""файл main.py""" from tkinter import * import tkinter.ttk as ttk frm_bg = "#cecece" root = Tk() root.title("R-Calc") root.geometry('600x300+700+50') root.resizable(False, False) u = 0 r = 0 i = 0 def choiceF(): """настраивает внешний вид калькулятора под выбранную формулу""" if var.get() == 0: label2['text'] = "I=U/R" label3['text'] = "U=" label4['text'] = "R=" label5['text'] = "I=" label8['text'] = "Вольт" label9['text'] = "Ом" label10['text'] = "Ампер" u = a r = b elif var.get() == 1: label2['text'] = "U=I*R" label3['text'] = "I=" label4['text'] = "R=" label5['text'] = "U=" label8['text'] = "Ампер" label9['text'] = "Ом" label10['text'] = "Вольт" i = a r = b elif var.get() == 2: label2['text'] = "R=U/I" label3['text'] = "U=" label4['text'] = "I=" label5['text'] = "R=" label8['text'] = "Вольт" label9['text'] = "Ампер" label10['text'] = "Ом" u = a i = b def takeValues(): if var.get() == 0: tok() elif var.get() == 1: napr() elif var.get() == 2: res() def tok(): """расчеты по первой формуле""" a = ent1.get() b = ent2.get() u = float(a) r = float(b) x = u / r if 1000 < x < 1000000: x = x / 1000 label10['text'] = "килоАмпер" elif 0.001 < x < 1: x = x * 1000 label10['text'] = "миллиАмпер" elif 0.000001 < x < 0.001: x = x / 10 ** 6 label10['text'] = "микроАмпер" label7['text'] = round(x, 4) def napr(): """расчеты по второй формуле""" a = float(ent1.get()) b = float(ent2.get()) i = float(a) r = float(b) label7['text'] = round(a * b, 4) def res(): """расчеты по третьей формуле""" a = ent1.get() b = ent2.get() u = float(a) i = float(b) label7['text'] = round(u / i, 4) def resetCalc(): """очистка значений для повторного расчета""" pass # расстановка и описание лейблов label1 = Label(root, text="Выбите ниже нужный вариант \n формулы и нажмите «выбрать»") label1.place(x=20, y=30) label2 = Label(root, text="I=U/R", font="arial 16") label2.place(x=320, y=160) label3 = Label(root, text="".rjust(4), font="arial 16") label3.place(x=235, y=65) label4 = Label(root, text="".rjust(4), font="arial 16") label4.place(x=235, y=95) label5 = Label(root, text="".rjust(4), font="arial 16") label5.place(x=235, y=125) label6 = Label(root, text="Введите известные значения \n и нажмите «расчитать»") label6.place(x=240, y=30) label7 = Label(root, text="0".rjust(20), bg="#FCD9B6", font="arial 12") label7.place(x=280, y=128) label8 = Label(root, text="", font="arial 12") label8.place(x=370, y=65) label9 = Label(root, text="", font="arial 12") label9.place(x=370, y=97) label10 = Label(root, text="", font="arial 12") label10.place(x=370, y=130) # расстановка окон для ввода значений a = IntVar() b = IntVar() ent1 = ttk.Entry(root, width=12, textvariable=a) ent1.place(x=280, y=67) ent2 = ttk.Entry(root, width=12, textvariable=b) ent2.place(x=280, y=98) # установка элемента radioButton var = IntVar() var.set(0) rb1 = Radiobutton(text="ищем I по формуле: I=U/R", variable=var, value=0) rb1.place(x=20, y=80) rb2 = Radiobutton(text="ищем U по формуле: U=I*R", variable=var, value=1) rb2.place(x=20, y=100) rb3 = Radiobutton(text="ищем R по формуле: R=U/I", variable=var, value=2) rb3.place(x=20, y=120) # расстановка и назначение действий кнопок button1 = Button(text="Выбрать ", font="arial 10", command=choiceF) button1.place(x=30, y=160) button2 = Button(text="Рассчитать - ", font="arial 10", command=takeValues) button2.place(x=220, y=160) button3 = Button(text="Очистить\n/ввести новые\n значения", font="arial 10", height=3, command=resetCalc) button3.place(x=450, y=60) root.mainloop()
Офлайн
Из кода непонятно какие “все” переменные надо восстанавливать. похоже их четыре.
def reset(): global u,r,i,var u = 0 r = 0 i = 0 var.set(0) .... reset() root.mainloop()
Офлайн
doza_andспасибо за комментарии, учту.. я только месяц как занимаюсь питоном.. поэтому некоторые вещи для меня еще не очевидны.. )
Из кода непонятно какие “все” переменные надо восстанавливать. похоже их четыре.
Отредактировано VitEsk (Фев. 24, 2020 08:48:59)
Офлайн