2016-04-10 12 views
0

Giriş ekranına sahip olmak istiyorum ve giriş başarılı olunca, ekran kapanır ve yeni bir ekran oluşturulur. Sorun şu, sadece şu kodu beğendiğimde, her iki ekran da aynı anda açılır. Kodu geliştirmek için herhangi bir öneriniz varsa, lütfen yapın! :)Tkinter - Bir pencere aç ve kapa close bir

from Tkinter import * 
import mysql.connector 
import tkMessageBox 

class Tela_login(Frame): 
    root = Tk() 
    root.geometry("1024x768") 
    root.resizable(width=FALSE, height=FALSE) 
    background_image = PhotoImage(file="fundo.gif") 
    def __init__(self,master): 
     Frame.__init__(self,master) 
     self.grid() 
     fundo = Label(image=self.background_image) 
     fundo.place(x=0,y=0,relwidth=1,relheight=1) 
     self.create_screen() 

    def create_screen(self): 
     self.label1 = Label(text="Login",font = ("Arial",60)) 
     self.label2 = Label(text="Senha",font = ("Arial",60)) 
     self.login = Entry(font = ("Arial",60),width = 10) 
     self.senha = Entry(show="*",font = ("Arial",60), width= 10) 
     self.entrar = Button(text="Entrar",command=lambda : self.efetua_login(),font = ("Arial",60),width=10) 

     self.label1.grid(padx=258,pady=(70,0)) 
     self.login.grid(padx=258) 
     self.label2.grid(padx=258,pady=(50,0)) 
     self.senha.grid(padx=258) 
     self.entrar.grid(padx=258,pady=(50,0)) 

    def efetua_login(self): 
     login = self.login.get() 
     senha = self.senha.get() 

     cnx = mysql.connector.connect(user='root', password='123qwe', host='192.168.56.1', database='teste') 
     cursor = cnx 
     cursor = cnx.cursor() 

     query = ("SELECT nome, senha FROM funcionario WHERE nome = %s AND senha = %s") 
     cursor.execute(query, (login,senha)) 
     row = cursor.fetchone() 

     if row is None: 

      tkMessageBox.showinfo("Erro","Usuario ou Senha Incorretos") 

     else: 
      app2 = Tela_principal() 
      self.root.destroy() 
      Tela_principal.root.mainloop() 


class Tela_principal(Frame): 
    root = Tk() 
    root.geometry = ("1024x768") 
    root.resizable(width=FALSE, height=FALSE) 

    def inicia(self, master): 
     background_image = PhotoImage(file="fundo.gif") 
     app2 = Tela_principal(self.root) 
     Frame.__init__(self, master) 
     self.grid() 
     self.create_widgets() 

app = Tela_login(Tela_login.root) 
Tela_login.root.mainloop() 

cevap

0

Büyük olasılıkla iki adet Tk() örneğini çalıştırmak istemezsiniz. Giriş ekranı için gidebileceğiniz iki yol var. Kök penceresini çekebilir ve giriş ekranını, Toplevel'in başlatma penceresi üzerine kök penceresini geri çekerek ve oturum başarılı olduğunda, üst seviyeyi yok edip kök penceresini kaldırdığınızda Toplevel yapabilirsiniz. Veya, daha da kolay giriş ekranınızı ayrı bir çerçeveye koyabilirsiniz, düzeninize bağlı olarak ana çerçeveyi pack_forget veya grid_forget kullanarak gizleyin ve daha sonra çerçeveyi oturum açın/yok veya gizleyin ve ana uygulama çerçevesini tekrar göstermek için pack veya grid'u geri çağırın.

0

Slayer, dediğin gibi yaptım ve bir cazibe gibi çalıştı! Örnek kod örneği:

from tkinter import * 

class Tela_login(Frame): 
    def __init__(self,master): 
     Frame.__init__(self, master) 
     self.grid() 
     self.button1 = Button(text = "Open",command = lambda: self.open_login()) 
     self.button1.grid() 

    def open_login(self): 
     root2 = Toplevel() 
     app2 = Tela_principal(root2) 

class Tela_principal(Frame): 
    def __init__(self,master): 
     Frame.__init__(self, master) 
     self.grid 

root = Tk() 
root.geometry("800x600") 
app = Tela_login(root) 
root.mainloop()