Как я могу использовать свой код, чтобы закрыть окно в Tkinter? - PullRequest
0 голосов
/ 26 мая 2018

Это мой код.Все, что он делает, это открывает окно и имеет синюю кнопку со словом «лед» на нем.Как только вы нажимаете кнопку «Лед», открывается второе окно и предполагается, что оно закрывается.Но я не могу заставить это работать.

from tkinter import *
import tkinter.messagebox
import os.path        

def main():
    #opening first window
    top=Tk()
    #changing window size, color, and name
    top.configure(bg="#AED6F1")
    top.geometry("800x600+300+80")
    top.title()
    #Button to get login screen
    Button_1 =   Button(top,text="Ice",
                        bg="#AED6F1",relief=FLAT,
                        bd=0,font="Times 
                        100 bold",command=secondary)

    Button_1.place(x=0,y=0)
    top.mainloop()
def secondary():
    top.destroy()
main()

Просто выдает ошибку:

return self.func (* args) Файл "E: \ Programing \ test\ Eise.py ", строка 21, во вторичном top.destroy () NameError: имя 'top' не определено

Что мне нужно добавить, чтобы заставить это работать?

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Вы присваиваете top внутри функции main, что означает, что она не существует вне этой функции, и поэтому функция secondary не может ее найти.

Вы можете изменить область действия top с помощью global:

def main():
    global top
    ...

Также;Вы должны взглянуть на Лучший способ структурировать приложение tkinter

0 голосов

top объявлено как локальная переменная, и вам нужно объявить это как глобальную переменную:

from tkinter import *
import tkinter.messagebox
import os.path        

def main():

    #create all windows

    global top, down, left, right # Declare all windows as global

    top = down = left = right = Tk() # All window variables are Tk()

    #changing window size, color, and name
    top.configure(bg="#AED6F1")
    top.geometry("800x600+300+80")
    top.title()
    #Button to get login screen
    Button_1 = Button(top, text="Ice",
                        bg="#AED6F1",relief=FLAT,
                        bd=0,font="Times 100 bold",command=secondary)

    Button_1.place(x=0,y=0)
    top.mainloop()
def secondary():
#destroy all windows
    top.destroy()
    down.destroy()
    left.destroy()
    right.destroy()
main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...