Как уничтожить окно Класса после успешного входа в Ткинтер? - PullRequest
0 голосов
/ 29 сентября 2019

Мой текущий код находится внизу

Я пытаюсь закрыть Window1 после успешного входа и открыть Window2

В настоящее времяУ меня есть имя пользователя только для целей тестирования.

Мой текущий оператор if открывает новое окно, если one - это имя пользователя.Но отображаются два окна.

Мне нужно избавиться от окна 1 и просто показать окно 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()

1 Ответ

0 голосов
/ 29 сентября 2019

Вы используете много библиотек, которые вам не нужны.В любом случае вам просто нужна одна строка кода, чтобы это работало. Внутри if оператор self.master.withdraw ()

- EDIT-- Поскольку вы просили об этом, я добавил функцию взакройте 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...