如何在tkinter上关闭上一个窗口?

单击按钮转到下一个窗口时,我正在尝试关闭上一个窗口。我做不到。怎么了?

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',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: ',y=10)
tk.Button(janela1,command=newwindow).place(x=250,y=470)

janela1.mainloop()

如您所见,我正在尝试使用.destroy(),但是它没有用。有什么办法吗?我刚刚开始学习Python,所以我知道这可能很简单。感谢您的帮助!

lwcxyw 回答:如何在tkinter上关闭上一个窗口?

我看到了几个问题。主要的原因是您无法调用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,command=make_newwindow).place(x=250,y=470)

root.mainloop()

即使不是严格必要的,我还是做了一些改变,就是如何将调用place()的结果分配给小部件的名称。由于place()(以及pack()grid())总是返回None,因此该变量最终将获得的值-这永远是您想要的。您将在这里摆脱它,但这仅是因为这些名称不再被引用。

本文链接:https://www.f2er.com/3155686.html

大家都在问