Как закрыть предыдущее окно на tkinter? - PullRequest
1 голос
/ 06 ноября 2019

Я пытаюсь закрыть предыдущее окно, когда нажимаю кнопку, чтобы перейти к следующему окну. Я не могу это сделать. Что не так?

from tkinter import *

def newwindow2():
    newwindow.destroy()
    newwindow2 = tk.Toplevel()
    newwindow2.title('Nível da grama região 3')
    newwindow2.geometry('580x520')
    labl3 = Label(newwindow2, text='A foto do nível da grama na região 3 foi tirada:  \n', font=30).place(x=110, y=10)
    tk.Button(newwindow2, text='Fim').place(x=250, y=470)

def newwindow():
    janela1.destroy()
    newwindow = tk.Toplevel()
    newwindow.title('Nível da grama região 2')
    newwindow.geometry('580x520')
    labl2 = Label(newwindow, text='A foto do nível da grama na região 2 foi tirada:  \n', font=30).place(x=110, y=10)
    tk.Button(newwindow, text='Próximo', command=newwindow2).place(x=250, y=470)


janela1 = tk.Tk()
janela1.title('Nível da grama região 1')
janela1.geometry("580x520")
labl1=Label(janela1, text='A foto do nível da grama na região 1 foi tirada: ',font=30).place(x=110, y=10)
tk.Button(janela1, text='Próximo', command=newwindow).place(x=250, y=470)

janela1.mainloop()

Как видите, я пытаюсь использовать .destroy (), но он не работает. Любые решения? Я только начинаю изучать Python, поэтому я знаю, что это может быть очень просто. Спасибо за помощь!

1 Ответ

0 голосов
/ 06 ноября 2019

вижу вижу несколько проблем. Основным из них является то, что вы не можете вызвать newwindow.destroy(), потому что newwindow - это функция, а не виджет tk.Toplevel. Другим является janela1.destroy(), уничтожающий себя, и это корневое окно.

Вместо того, чтобы уничтожать окна, вы можете просто withdraw() их. Вот код, который, я думаю, делает то, что вы хотите:

from tkinter import *
import tkinter as tk

def make_newwindow2():
#    newwindow.destroy()
    global newwindow2

    newwindow.withdraw()
    newwindow2 = tk.Toplevel()
    newwindow2.title('Nível da grama região 3')
    newwindow2.geometry('580x520')
    labl3 = Label(newwindow2,
                  text='A foto do nível da grama na região 3 foi tirada:\n', font=30)
    labl3.place(x=110, y=10)
    tk.Button(newwindow2, text='Fim', command=root.quit).place(x=250, y=470)

def make_newwindow():
#    janela1.destroy()
    global newwindow

    root.withdraw()
    newwindow = tk.Toplevel()
    newwindow.title('Nível da grama região 2')
    newwindow.geometry('580x520')
    labl2 = Label(newwindow,
                  text='A foto do nível da grama na região 2 foi tirada:\n', font=30)
    labl2.place(x=110, y=10)
    tk.Button(newwindow, text='Próximo', command=make_newwindow2).place(x=250, y=470)

root = tk.Tk()
root.title('Nível da grama região 1')
root.geometry("580x520")

labl1 = Label(root, text='A foto do nível da grama na região 1 foi tirada: ', font=30)
labl1.place(x=110, y=10)
tk.Button(root, text='Próximo', command=make_newwindow).place(x=250, y=470)

root.mainloop()

Что-то еще, что я изменил, хотя это не было строго необходимо, было то, как вы присваивали результат вызова place() именамвиджеты. Так как place()pack() и grid()) всегда возвращают None, это значение переменной, в результате которой получится переменная, а этого никогда не будет. Вам здесь это сходит с рук, но только потому, что на эти имена больше не ссылаются.

...