Python Tkinter:destroy()我的Toplevel()窗口

时间:2016-11-16 00:15:57

标签: python-2.7 tkinter

我不明白我做错了什么。 我正在尝试创建一个登录窗口。当您单击登录时,我想要执行操作,然后关闭并转到主GUI。

我在网上发现了一堆我无法做出正面或反面的东西。我不想剪切和粘贴我不完全理解的其他人的代码。

所以我想了解我在这里做错了什么。首先,我创建了一个destroyWindow()方法,我从按钮调用它只是一个起点。 存在一个范围问题,其中loginWindow在其自己的类中不存在。我认为类应用程序会解决范围问题。我试过用'自我'。但无济于事。我在其他人的代码中尝试过随机的东西。有人可以找出我在这里缺少的东西吗?我得到了

  
    
      

NameError:未定义全局名称“loginWindow”

    
  
#!/Usr/bin/Python
import Tkinter,tkFileDialog,tkMessageBox
from Tkinter import *
from tkFileDialog import *
import sys, time, datetime
import pathlib
from pathlib import * #makes it really easy to travers folders if needed.

mainWindow = Tk()
mainWindow.wm_title("my prog")
mainWindow.wm_iconbitmap('fb_logo_sm.ico')
mainFrame = Frame(mainWindow)
mainFrame.grid(padx=10,pady=10)

class loginWindowClass():
    def __init__(self):
        loginWindow = Tkinter.Toplevel()
        loginWindow.configure(bg='#22BEF2')    
        loginWindowFrame = Frame(loginWindow,bg='#22BEF2')
        loginWindowFrame.grid(padx=90,pady=50)
        loginWindow.wm_title("log in")
        loginWindow.wm_iconbitmap('my.ico')
        usernameLable = Tkinter.Label(loginWindowFrame,text="User Name",fg='#FFFFFF',bg='#22BEF2')
        usernameLable.grid(row=1,column=2,padx=(0,5),sticky=W+S)
        usernameField = Entry(loginWindowFrame)
        usernameField.config(width=24)
        usernameField.grid(row=2,column=2)
        passwordLable =Tkinter.Label(loginWindowFrame,text="Password",fg='#FFFFFF',bg='#22BEF2')
        passwordLable.grid(row=3,column=2,sticky=W+S)
        passwordField = Entry(loginWindowFrame)
        passwordField.config(width=24)
        passwordField.grid(row=4,column=2)
        loginButton = Button(loginWindowFrame, text='Log In', height=1, width=20, wraplength=100,        fg='white',bg='#bbbbbb',command=self.destroyWindow).grid(row=5,column=2,pady=(10,0))
    def destroyWindow(self):
        loginWindow.destroy()

logwin = loginWindowClass()

mainWindow.mainloop()

1 个答案:

答案 0 :(得分:1)

阿。 '自。'确实是答案。

我没有在任何地方应用它。这是解决方案

#!/Usr/bin/Python
import Tkinter,tkFileDialog,tkMessageBox
from Tkinter import *
from tkFileDialog import *
import sys, time, datetime
import pathlib
from pathlib import * #makes it really easy to travers folders if needed.

mainWindow = Tk()
mainWindow.wm_title("my prog")
mainWindow.wm_iconbitmap('fb_logo_sm.ico')
mainFrame = Frame(mainWindow)
mainFrame.grid(padx=10,pady=10)

class loginWindowClass():
    def __init__(self):
        self.loginWindow = Tkinter.Toplevel()
        self.loginWindow.configure(bg='#22BEF2')    
        loginWindowFrame = Frame(self.loginWindow,bg='#22BEF2')
        loginWindowFrame.grid(padx=90,pady=50)
        self.loginWindow.wm_title("log in")
        self.loginWindow.wm_iconbitmap('my.ico')
        usernameLable = Tkinter.Label(loginWindowFrame,text="User Name",fg='#FFFFFF',bg='#22BEF2')
        usernameLable.grid(row=1,column=2,padx=(0,5),sticky=W+S)
        usernameField = Entry(loginWindowFrame)
        usernameField.config(width=24)
        usernameField.grid(row=2,column=2)
        passwordLable =Tkinter.Label(loginWindowFrame,text="Password",fg='#FFFFFF',bg='#22BEF2')
        passwordLable.grid(row=3,column=2,sticky=W+S)
        passwordField = Entry(loginWindowFrame)
        passwordField.config(width=24)
        passwordField.grid(row=4,column=2)
        loginButton = Button(loginWindowFrame, text='Log In', height=1, width=20, wraplength=100,        fg='white',bg='#bbbbbb',command=self.destroyWindow).grid(row=5,column=2,pady=(10,0))
    def destroyWindow(self):
        self.loginWindow.destroy()

logwin = loginWindowClass()

mainWindow.mainloop()