Python sayfalar arası geçiş

Arkadaşlar merhaba
Python üzerinden bir log_in arayüzü oluşturmak istiyorum.Log_in kısmını geçen kullanıcı oradan başka bir arayüzü geçecek…Bununla ilgili örnek atabilecek var mı

Daha detaylı bilgi vermeniz gerekli. Bir arayüz mü oluşturuyorsunuz, arayüz oluşturuyorsanız hangi kütüphaneyi kullanıyorsunuz ? Bu tip detayları verirseniz daha çabuk yardım alabilirsiniz.

tkinter modülünü kullanarak bir arayüz oluşturma…Postgre tabanlı bir veritabaım var…Kişi gerekli log_in kısmını geçtikten sonra benim veritabanıma erişim sağlayabilecek…Ama gerekli şifreyi sağlayamazsa giriş yapamayacak tabilki

Şimdiye kadar üzerinde uğraştığınız bir kod var mı? Onun üzerinden yardımcı olalım isterseniz.

1 Beğeni
from tkinter import *
import tkinter.messagebox
import psycopg2 as ps


class log_in:
    def __init__(self,pencere):


        self.pencere=pencere
        self.pencere.geometry('250x100+500+350')
        self.pencere.title('Planlama')
        self.Kullanıcı_Adi = Label(self.pencere,text='Kullanıcı Adı:').grid(row=0,column=0)
        self.Paralo_Adi = Label(self.pencere, text='Parolanızı Giriniz:').grid(row=1,column=0)
        self.Kullanıcı = Entry(self.pencere)
        self.Kullanıcı.grid(row=0,column=1)
        self.Parola = Entry(self.pencere,show="*")
        self.Parola.grid(row=1,column=1)

        self.Giris_Button = Button(self.pencere,text='   Giriş    ',width=7,command=self.giris_bolumu).place(relx=0.65,rely=0.45)

        self.Hatirla = Checkbutton(self.pencere,text='Beni Hatırla').grid(row=3,sticky=W)


    def giris_bolumu(self):

        kullanıcı_bilgisi=self.Kullanıcı.get()
        paralo_bilgisi=self.Parola.get()

        if not self.Kullanıcı.get():
            bosluk=tm.askyesno(title="Hata!",
                               message="Gerekli yerleri doldurmadınız,tekrar giriş yapmak ister misiniz?")
            if bosluk == False:
                self.pencere.destroy()

        if (kullanıcı_bilgisi == 'asd') and (paralo_bilgisi == 'asd123'):
            self.olumlu=tm.showinfo('Giriş','Hoşgeldiniz')


        if (kullanıcı_bilgisi != 'asd') and (paralo_bilgisi == 'asd123'):
            tm.showerror('Hata','Kullanıcı adınızı yanlış girdiniz')
        if (kullanıcı_bilgisi == 'asd') and (paralo_bilgisi != 'asd123'):
            tm.showerror('Hata', 'Parolanızı yanlış girdiniz')

    def diger_pencere(self):
        if self.olumlu == 'ok':
            self.pencere.destroy()
            self.pencere2=Toplevel()




pencere=Tk()
uygulama=log_in(pencere)
pencere.mainloop()

burada mesela girişten ana pencere kapanıp,ikinci pencerenin açılmasını sağlamaya çalışıyorum lakin olmadı

İlk olarak, tkinter.messagebox modülünü import ettişmisiniz ancak programda tm olarak kullanmışsınız. Doğal olarak “tm bulunamadı” hatası verdi. Bu yüzden import şu şekilde değiştirilmeli(belki de unutmuşsunuzdur)

import tkinter.messagebox as tm

Ana pencereyi kapatıp ikinci pencereyi açmak mantığa aykırıdır. Çünkü ikinci pencere, birinci pencereyi referans alarak ekranda görünür. Ana pencereyi kapatırsanız, ikinci pencereyle birlikte bir pencere daha açılır. Bu da istenmeyen birşeydir.

Ana pencereyi kapatmak yerine, ana penceredeki herşeyi kaldırıp yeni pencere araçları ekleyebilirsiniz.

# -*- coding: cp1254 -*-
from tkinter import *
import tkinter.messagebox as tm
#import psycopg2 as ps


class log_in:
    def __init__(self,pencere):


        self.pencere=pencere
        self.pencere.geometry('250x100+500+350')
        self.pencere.title('Planlama')
        self.Kullanıcı_Adi = Label(self.pencere,text='Kullanıcı Adı:').grid(row=0,column=0)
        self.Paralo_Adi = Label(self.pencere, text='Parolanızı Giriniz:').grid(row=1,column=0)
        self.Kullanıcı = Entry(self.pencere)
        self.Kullanıcı.grid(row=0,column=1)
        self.Parola = Entry(self.pencere,show="*")
        self.Parola.grid(row=1,column=1)

        self.Giris_Button = Button(self.pencere,text='   Giriş    ',width=7,command=self.giris_bolumu).place(relx=0.65,rely=0.45)

        self.Hatirla = Checkbutton(self.pencere,text='Beni Hatırla').grid(row=3,sticky=W)


    def giris_bolumu(self,event = None):

        kullanıcı_bilgisi=self.Kullanıcı.get()
        paralo_bilgisi=self.Parola.get()

        if not self.Kullanıcı.get():
            bosluk=tm.askyesno(title="Hata!",
                               message="Gerekli yerleri doldurmadınız,tekrar giriş yapmak ister misiniz?")
            if bosluk == False:
                self.pencere.destroy()

        if (kullanıcı_bilgisi == 'asd') and (paralo_bilgisi == 'asd123'):
            self.olumlu=tm.showinfo('Giriş','Hoşgeldiniz')
            self.ekrani_temizle()


        if (kullanıcı_bilgisi != 'asd') and (paralo_bilgisi == 'asd123'):
            tm.showerror('Hata','Kullanıcı adınızı yanlış girdiniz')
        if (kullanıcı_bilgisi == 'asd') and (paralo_bilgisi != 'asd123'):
            tm.showerror('Hata', 'Parolanızı yanlış girdiniz')

    def ekrani_temizle(self):
        for widget in self.pencere.winfo_children(): # pencerede bulunan herşeyi kaldırdık
            widget.destroy()
        self.giris_tamam()

    def giris_tamam(self):
        self.giris = Label(text = "Programa hoşgeldiniz")
        self.giris.pack()

pencere=Tk()
uygulama=log_in(pencere)
pencere.mainloop()
1 Beğeni

Ustunden cok zaman gecmis ancak ben genelde bunu Frame ile yapiyorum. Frame’i pencereden silip diger Frame’i gonderiyorum. Daha pratik oluyor.

Yani bütün widgetleri silmek yerine direkt frame siliyorsunuz değil mi?

Evet, aynen öyle. Mevcut frame’i silip yenisini yolluyorum.