Как я могу уничтожить окно __init__? - PullRequest
0 голосов
/ 02 мая 2019

У меня есть программа с классом main и функциями, первая из них - __init__ с аргументами self и master. Это начинается с окна входа в систему, поэтому я хочу уничтожить эту функцию __init__, но я нуб в этом и не могу: // Я попытался self.master.destroy(), и все исчезло, но все еще одно пустое окно показывало. Кто-нибудь может мне помочь?

from tkinter import *
from tkinter import messagebox as ms
from PIL import Image, ImageTk
import os
import time
import pymysql

root = Tk()
root.title('Sistema de Senhas')

root.configure(background='white')

class main:
    def __init__(self,master):
        self.master = master
        self.username = StringVar()
        self.password = StringVar()

        self.logf = Frame(self.master,padx =10,pady = 10, bg='white')
        Label(self.logf,text = 'Utilizador: ',font = ('Corbel bold',13), bg= 'white',pady=5,padx=5).grid(sticky = W)
        Entry(self.logf,textvariable = self.username,bd = 2,font = ('Corbel bold',11)).grid(row=0,column=1)
        Label(self.logf,text = 'Palavra-passe: ',font = ('Corbel bold',13), bg= 'white',pady=5,padx=5).grid(sticky = W)
        Entry(self.logf,textvariable = self.password,bd = 2,font = ('Corbel bold',11),show = '*').grid(row=1,column=1)
        self.logf.pack()

        self.button = Button(self.master,text = 'Entrar',bd = 2 ,font = ('Corbel bold',12), relief='groove', bg= 'white',padx=5,pady=2,command=self.login)
        self.button.pack()

    def login(self):

        utilizador=self.username.get()
        password=self.password.get()

        self.connection = pymysql.connect(host="localhost", user="root", passwd="", database="sistemasenhas")
        self.cur = self.connection.cursor()

        query="SELECT * FROM utilizadores WHERE nome=%s AND password=%s"
        data=self.cur.execute(query,(utilizador,password))

        if(len(self.cur.fetchall())>0):
            query="SELECT * FROM utilizadores WHERE nome=%s AND password=%s AND acesso=0"
            data=self.cur.execute(query,(utilizador,password))
            if(len(self.cur.fetchall())>0):
                master.destroy() # It's here
                self.janela()
            else:
                master.destroy() It's here
                self.admin()
        else:
            ms.showerror('Oops','Utilizador ou palavra-passe incorretos!')

1 Ответ

2 голосов
/ 02 мая 2019

Ваш вопрос несколько сбивает с толку.Ваш пример не показывает использование destroy(), и вы не объясняете, что вы пытаетесь сделать в классе main.Вы не хотите уничтожать «Метод» __init__, вы, вероятно, хотите закрыть окно или корневое окно.Мои предположения основаны на вашем вопросе и примере, когда вы пытаетесь создать окно входа в систему.

При этом destroy() является правильным методом.

Вот простой пример использования вашего кода, который показывает, что вы можете сделать, чтобы закрыть его.

from tkinter import *


root = Tk()
root.title('Login system')
root.configure(background='white')

class main:
    def __init__(self,master):
        Button(master, text='Exit', command=master.destroy).pack()

main(root)
root.mainloop()

Здесьпример, который немного чище и следует модели ООП.

import tkinter as tk


class Main(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('Login system')
        self.configure(background='white')
        tk.Button(self, text='Exit', command=self.destroy).pack()

Main().mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...