[英]How to destroy Class window after successful Login in tkinter?
我當前的代碼位於底部
成功登錄后我試圖關閉Window1
並打開Window2
目前,我僅出於測試目的輸入用戶名。
如果one
是用戶名條目,我當前的if
語句會打開新的 window。 但是顯示了兩個 windows。
我需要擺脫 Window 1 並在成功登錄后只顯示 Window 2 。
我做了一些研究並找到了這個答案,但我認為這不適用於我當前的代碼。
我也嘗試了以下方法,但出現錯誤:
def login_system(self):
u = self.UsernameEntry.get()
if u == "one":
self.newWindow = Toplevel(self.master)
self.app = Window2(self.newWindow)
Window1().destory()
錯誤:
TypeError: __init__() missing 1 required positional argument: 'master'
我怎樣才能做到這一點?
from tkinter import *
from tkinter import DISABLED, messagebox
import tkinter.ttk as ttk
import os
import glob
from PIL import Image, ImageTk, ImageGrab
from pathlib import Path
import pyautogui
import time
def main():
root = Tk()
app = Window1(root)
root.mainloop()
class Window1:
def __init__(self,master):
self.master = master
self.master.title("User Log In")
self.master.geometry('1000x750')
self.frame = Frame(self.master)
self.frame.pack(fill="both", expand=True)
self.UsernameEntry = Entry(self.frame)
self.UsernameEntry.grid(row = 2, column = 0)
self.btnLogin = Button(self.frame, text = 'login', width = 17, command = self.login_system)
self.btnLogin.grid(row = 3, column = 0)
def login_system(self):
u = self.UsernameEntry.get()
if u == "one":
self.newWindow = Toplevel(self.master)
self.app = Window2(self.newWindow)
else:
self.UsernameEntry.delete(0,"end")
class Window2:
def __init__(self,master):
notebook = ttk.Notebook(master)
notebook.pack(expand = 1, fill = "both")
#Frames
main = ttk.Frame(notebook)
manual = ttk.Frame(notebook)
notebook.add(main, text='Main-Screen')
notebook.add(manual, text='Manual')
if __name__ == '__main__':
main()
您正在使用許多不需要的庫。 無論如何,您只需要一行代碼就可以在 if 語句self.master.withdraw()內部工作
--EDIT-- 因為你要求它,我添加了一個 function 來關閉 cmd
完整代碼
from tkinter import *
...
def main():
root = Tk()
app = Window1(root)
root.mainloop()
class Window1:
def __init__(self,master):
self.master = master
....
self.btnLogin = Button(self.frame, text = 'login', width = 17, command = self.login_system)
self.btnLogin.grid(row = 3, column = 0)
def on_closing(self): #Add this event handler
self.master.destroy()
def login_system(self):
u = self.UsernameEntry.get()
if u == "one":
self.master.withdraw() #Do NOT call destroy as you need the root to be
#active for Toplevel
self.newWindow = Toplevel(self.master)
self.newWindow.protocol("WM_DELETE_WINDOW", self.on_closing) #And add this
self.app = Window2(self.newWindow)
else:
self.UsernameEntry.delete(0,"end")
class Window2:
....
if __name__ == '__main__':
main()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.