Как сделать кнопку назад?
Как в этом коде сделать кнопку назад и где мне сделать def back(), чтобы оно видело все виджеты, которые находятся в коде и чтобы все виджеты видели эту функцию и могли её выполнить
import tkinter as tk
from tkinter import *
from tkinter import messagebox
from pythonping import ping
import string
import secrets
win = Tk()
win.geometry("375x250")
win.resizable(0,0)
win.title("All-in-one")
# defs
Input1 = StringVar()
def default():
def sitep():
def showping(event=None):
try:
win.geometry("450x210")
myLabel4 = Label(win, text="Ожидайте...", font=("Montserrat", 11))
myLabel4.pack()
win.update()
myLabel4.destroy()
win.geometry("450x190")
tk.messagebox.showinfo("Пинг", "- Результаты пинга:\n" + str(ping(Input1.get(), verbose=True, count=5)) + "\n\nПримечание: возможно, создатель сайта закрыл доступ для отправки пакетов на его сайт, поэтому некоторые рабочие сайты могут не пинговаться")
except:
myLabel4.destroy()
tk.messagebox.showerror("Ошибка", "- Произошла ошибка, проверьте правильность написания IP-адреса или ссылки")
win.geometry("450x190")
myLabel1.destroy()
myButton1.destroy()
myButton2.destroy()
myButton3.destroy()
myLabel2 = Label(win, text="Пинг", font=("Montserrat", 20), highlightbackground='black', highlightthickness=2, width=5)
myLabel2.pack()
myLabel3 = Label(win, text="Введите ссылку или IP-адрес", font=("Montserrat", 18))
myLabel3.pack()
myInput1 = Entry(win, font=("Montserrat", 15), textvariable=Input1, justify=LEFT, width=30, highlightbackground='black', highlightthickness=2)
myInput1.pack(ipady=2)
myInput1.bind('<Return>', showping)
myButton4 = Button(win, text="Принять", font=("Montserrat", 15), command=showping)
myButton4.pack(ipady=2, pady=5)
myButton6 = Button(win, text="Назад", font=("Montserrat", 15), command=back)
myLabel1 = Label(win, text="Способы", font=("Montserrat", 20))
myLabel1.pack()
myButton1 = Button(win, text="Пинг", font=("Montserrat", 16), width=17, command=sitep)
myButton1.pack(pady=6)
myButton2 = Button(win, text="Длина текста", font=("Montserrat", 16), width=17)
myButton2.pack(pady=6)
myButton3 = Button(win, text="Генератор паролей", font=("Montserrat", 16), width=17)
myButton3.pack(pady=6)
# widgets
default()
win.mainloop()
Ответы (2 шт):
Автор решения: GrAnd
→ Ссылка
Предлагаю использовать отдельные окна для отдельных действий. Тогда не придётся персобирать элементы окна каждый раз.
import tkinter as tk
from tkinter import *
from tkinter import messagebox
from pythonping import ping
import string
import secrets
def back(current, parent):
current.destroy() # уничтожаем текущее окно
parent.deiconify() # показываем родительское окно
def win_ping(parent):
def showping(event=None):
try:
win.geometry("450x210")
myLabel4 = Label(win, text="Ожидайте...", font=("Montserrat", 11))
myLabel4.pack()
win.update()
myLabel4.destroy()
win.geometry("450x190")
tk.messagebox.showinfo("Пинг", "- Результаты пинга:\n" + str(ping(Input1.get(), verbose=True, count=5)) + "\n\nПримечание: возможно, создатель сайта закрыл доступ для отправки пакетов на его сайт, поэтому некоторые рабочие сайты могут не пинговаться")
except:
myLabel4.destroy()
tk.messagebox.showerror("Ошибка", "- Произошла ошибка, проверьте правильность написания IP-адреса или ссылки")
Input1 = StringVar()
parent.withdraw() # прячем родительское окно
win = tk.Toplevel() # создаём новое окно
win.geometry("450x190")
win.resizable(0,0)
myLabel2 = Label(win, text="Пинг", font=("Montserrat", 20), highlightbackground='black', highlightthickness=2, width=5)
myLabel2.pack()
myLabel3 = Label(win, text="Введите ссылку или IP-адрес", font=("Montserrat", 18))
myLabel3.pack()
myInput1 = Entry(win, font=("Montserrat", 15), textvariable=Input1, justify=LEFT, width=30, highlightbackground='black', highlightthickness=2)
myInput1.pack(ipady=2)
myInput1.bind('<Return>', showping)
myFrame = Frame(win)
myFrame.pack(ipady=2, pady=5)
myButton4 = Button(myFrame, text="Принять", font=("Montserrat", 15), command=showping)
myButton4.pack(side=LEFT, padx=15)
myButton6 = Button(myFrame, text="Назад", font=("Montserrat", 15), command=lambda: back(win, parent))
myButton6.pack(side=LEFT, padx=15)
win.protocol("WM_DELETE_WINDOW", lambda: back(win, parent)) # обработчик закрытия окна по стандартной кнопке в правом верхнем углу
def main():
win = Tk()
win.geometry("375x250")
win.resizable(0,0)
win.title("All-in-one")
myLabel1 = Label(win, text="Способы", font=("Montserrat", 20))
myLabel1.pack()
myButton1 = Button(win, text="Пинг", font=("Montserrat", 16), width=17, command=lambda: win_ping(win))
myButton1.pack(pady=6)
myButton2 = Button(win, text="Длина текста", font=("Montserrat", 16), width=17)
myButton2.pack(pady=6)
myButton3 = Button(win, text="Генератор паролей", font=("Montserrat", 16), width=17)
myButton3.pack(pady=6)
win.mainloop()
main()