2017-12-04 16 views
0

私はTkinterには非常に慣れているので、プログラミングの授業でこれを使用しなければなりません。 SuccessfulLoginウィンドウが開きます。私はtkinterに新しいことを覚えておいてください。ありがとうございました。Tkinter - Tkinterの別のウィンドウを開いている間にウィンドウを閉じる方法 - Python 3

import tkinter 
from tkinter import ttk 

------------------------------------------- -------------------------------------------------- --------------------------

class loginWindow(): 


def __init__(self, master): #constructor 

    self.master = master 
    self.master.title("Main Menu") #window title 
    self.master.geometry("400x400") #window size 
    self.master.configure(background = "#fff1d0") #window colour, hexadecimal codes 

    #self.photo = PhotoImage(file = "filename.png") #sets up image 
    #self.photoLabel = Label(self.master, image = self.photo, bg = "red") #puts image on label 
    #self.photoLabel.place(x=350 y=600) #places onto the screen with specified coordinates 

    self.enterLabel = tkinter.Label(self.master, text = "Launcher", font = ("Helvetica", 16), bg = "#fff1d0") 
    self.enterLabel.pack(pady = 10) 

    self.emptySpace = tkinter.Label(self.master, text = " ", bg = "#fff1d0") 
    self.emptySpace.pack(pady = 10) 

    self.username = tkinter.Label(self.master, text = "Username:", bg = "#fff1d0") #Label widget and properties 
    self.username.pack() 
    self.enterUser = tkinter.ttk.Entry(self.master, width = 40) #Creates text entry widget 
    self.enterUser.pack() 

    self.password = tkinter.Label(self.master, text = "Password:", bg = "#fff1d0") #Label widget and properties 
    self.password.pack() 
    self.enterPass = tkinter.ttk.Entry(self.master, width = 40, show = "*") #Creates text entry widget 
    self.enterPass.pack() 

    self.loginButton = tkinter.ttk.Button(self.master, width = 40, text = "Login", command = self.loginAccess) 
    self.loginButton.pack(pady = 10) 


def loginAccess(self): 

    username = "Aaron" #Needs to become a dictionary or database or something with all usernames and passwords 
    password = "Password" 
    global userUsername 
    userUsername = self.enterUser.get() 
    userPassword = self.enterPass.get() 

    if userUsername != username and userPassword != password: 

     self.enterLabel.configure(text = "Invalid username and password. Please try again.", font = (10)) 
     self.enterUser.delete(0, "end") 
     self.enterPass.delete(0, "end") 

    if userUsername == username and userPassword != password: 

     self.enterLabel.configure(text="Invalid password. Please try again.", font = (10)) 
     self.enterPass.delete(0, "end") 

    if userUsername == username and userPassword == password: 

     self.enterUser.delete(0, "end") 
     self.enterPass.delete(0, "end") 
     self.goToSuccessfulLoginWindow() 

def goToSuccessfulLoginWindow(self): 

    root2 = tkinter.Toplevel() 
    myGUI = successfulLogin(root2) 
    myGUI.setName(userUsername) 

----------------- -------------------------------------------------- -------------------------------------------------- -

class successfulLogin(): 


def __init__(self, master): 

    self.master = master 
    self.master.title("Login Successful") 
    self.master.geometry("700x700") 
    self.master.configure(background="#fff1d0") 

    self.confirmLabel = tkinter.Label(self.master, text = " ", font = ("Helvetica", 16), bg = "#fff1d0") 
    self.confirmLabel.pack() 

    self.quitButton = tkinter.ttk.Button(self.master, text = "Quit", command = self.quitWindow) 
    self.quitButton.pack() 

    self.logOutButton = tkinter.ttk.Button(self.master, text = "Log out", command = self.logout) 
    self.logOutButton.pack() 

def setName(self, username): 
    name = username 
    self.confirmLabel.configure(text = "welcome " + name) 

def quitWindow(self): 
    self.master.quit() 

def logout(self): 
    loginWindow(root) 
    self.master.destroy() 

----------------------------------------- -------------------------------------------------- ----------------------- -----

def centerWindow(width=300, height=200): 
screen_width = root.winfo_screenwidth() 
screen_height = root.winfo_screenheight() 
x = (screen_width/2) - (width/2) 
y = (screen_height/2) - (height/2) 
root.geometry('%dx%d+%d+%d' % (width, height, x, y)) 


root = tkinter.Tk() 
centerWindow(310, 375) 
root.resizable(False,False) 
loginWindow(root) 
root.mainloop(
+1

コードのインデントを修正する必要があります。また、あまりにも多くのコードを投稿しました。あなたの質問が2つの異なるウィンドウを管理する方法についてのものであるならば、おそらくあなたはあなたが持っている問題を説明するために12行か2行のコードしか必要としません。 [最小限で完全で検証可能なサンプルを作成する方法](http://stackoverflow.com/help/mcve)を参照してください。 –

+1

質問には、不要なコードがたくさんあります。あなたの質問に直接リンクしているコードを教えてください。 – Goralight

+1

また、 'if login == Trueのような単純なもので、LoginWindowとDrawNewWindowを破壊するとそのトリックを行います。うまくいけば、この疑似コードは役に立ちます(?) – Goralight

答えて

0

this answerに基づいて、以下の実施例を作製することができる。例では

import tkinter as tk 

root = tk.Tk() 

#In order to hide main window 
root.withdraw() 

tk.Label(root, text="This is the main window").pack() 

aWindow = tk.Toplevel(root) 

def change_window(): 
    #remove the other window entirely 
    aWindow.destroy() 

    #make root visible again 
    root.iconify() 
    root.deiconify() 

tk.Button(aWindow, text="This is aWindow", command=change_window).pack() 

root.mainloop() 

は、最初のウィンドウ aWindowがあります、そしてあなたはそれの上のボタンをクリックしたとき、それは aWindowを破壊し、再び rootウィンドウが表示されるようになります。

関連する問題