Python - Kullanıcı Giriş ve Kayıt Olma Ekranı - Tasarım Desteği Lazım #ProgramTanıtımı

Selamlar herkese,

Bir panel tasarımı yaptım. Programlarımızın ilk açılışta ihtiyaç duyabilecekleri bir giriş ve kayıt paneli. Asgari olarak gerekli koşul durumlarını da oluşturdum. Öncelikle kodları paylaşayım sizinle;

from tkinter import *
from tkinter import messagebox

import sqlite3

from datetime import datetime


class Application(object):

    def __init__(self):

        self.con = None  # sqlite3 file variable
        self.cursor = None  # sqlite3 for need cursor
        self.registered_user = None  # database registered user list
        self.max_user = 10  # database have maximum register user

        self.root_1 = None  # main window
        self.root_1_title = "LOGIN AND REGISTER"  # main window title
        self.root_1_geo = "325x350+100+100"  # main window width and height and location
        self.login_button = None  # we need open login screen
        self.register_button = None  # we need open register screen
        self.exit_button = None  # we need exit program
        self.state_1 = False  # screen state open or close
        self.login_frame = None  # login screen for frame
        self.register_frame = None  # register screen for frame

        self.username_label = None  # login and register for username title zone
        self.pass_label = None  # login and register for password title zone
        self.username_entry = None  # login and register for username entry zone
        self.pass_entry = None  # login and register for password entry zone

        self.clear_frame = None  # we need entry clear for frame
        self.exit_frame = None  # we need exit for frame
        self.confirm_frame = None  # we need to confirm

        self.login_info = None  # login info
        self.register_info = None  # register info

        self.database()

        self.main()  # main function

    def database(self):

        self.con = sqlite3.connect("database/db.db")
        self.cursor = self.con.cursor()

        self.cursor.execute("CREATE TABLE IF NOT EXISTS USER_DATA (USERNAME_1 TEXT, PASSWORD_1 TEXT,"
                            "REGISTER_DATE TEXT, LAST_LOGIN TEXT)")
        self.con.commit()

        self.con.close()

    def main(self):
        self.root_1 = Tk()
        self.root_1.geometry(self.root_1_geo)
        self.root_1.title(self.root_1_title)
        self.root_1.resizable(FALSE, FALSE)

        self.login_button = Button(self.root_1, text="LOGIN", width=10, command=self.login_screen)
        self.login_button.pack(side=TOP, pady=25)

        self.register_button = Button(self.root_1, text="REGISTER", width=10, command=self.register_screen)
        self.register_button.pack(side=TOP)

        self.exit_button = Button(self.root_1, text="EXIT", width=10, command=self.exit_program)
        self.exit_button.pack(side=TOP, pady=25)

        self.state_1 = False

        mainloop()

    def login_screen(self):

        if not self.state_1:
            self.login_frame = Frame(self.root_1, bd=5, relief=RAISED)
            self.login_frame.pack(pady=10)

            self.login_info = Label(self.login_frame, text="LOGIN SCREEN", width=42)
            self.login_info.grid(row=1, column=1, columnspan=2)

            self.username_label = Label(self.login_frame, text="USERNAME >>", width=20)
            self.username_label.grid(row=2, column=1)
            self.pass_label = Label(self.login_frame, text="PASSWORD >>", width=20)
            self.pass_label.grid(row=3, column=1)

            self.username_entry = Entry(self.login_frame, width=20)
            self.username_entry.grid(row=2, column=2)
            self.pass_entry = Entry(self.login_frame, width=20, show="*")
            self.pass_entry.grid(row=3, column=2)

            self.confirm_frame = Button(self.login_frame, text="CONFIRM", width=20, bd=2, relief=RAISED,
                                        command=self.confirm_login)
            self.confirm_frame.grid(row=4, column=1, pady=10)

            self.clear_frame = Button(self.login_frame, text="CLEAR", width=20, bd=2, relief=RAISED,
                                      command=self.clear_frame_1)
            self.clear_frame.grid(row=4, column=2)

            self.exit_frame = Button(self.login_frame, text="EXIT", width=42, bd=2, relief=RAISED,
                                     command=self.exit_frame_1)
            self.exit_frame.grid(row=5, column=1, columnspan=2, pady=10)

            self.state_1 = True

    def register_screen(self):

        if not self.state_1:
            self.register_frame = Frame(self.root_1, bd=5, relief=RAISED)
            self.register_frame.pack(pady=10)

            self.register_info = Label(self.register_frame, text="REGISTER SCREEN", width=42)
            self.register_info.grid(row=1, column=1, columnspan=2)

            self.username_label = Label(self.register_frame, text="USERNAME >>", width=20)
            self.username_label.grid(row=2, column=1)
            self.pass_label = Label(self.register_frame, text="PASSWORD >>", width=20)
            self.pass_label.grid(row=3, column=1)

            self.username_entry = Entry(self.register_frame, width=20)
            self.username_entry.grid(row=2, column=2)
            self.pass_entry = Entry(self.register_frame, width=20, show="*")
            self.pass_entry.grid(row=3, column=2)

            self.confirm_frame = Button(self.register_frame, text="CONFIRM", width=20, bd=2, relief=RAISED,
                                        command=self.confirm_register)
            self.confirm_frame.grid(row=4, column=1, pady=10)

            self.clear_frame = Button(self.register_frame, text="CLEAR", width=20, bd=2, relief=RAISED,
                                      command=self.clear_frame_1)
            self.clear_frame.grid(row=4, column=2)

            self.exit_frame = Button(self.register_frame, text="EXIT", width=42, bd=2, relief=RAISED,
                                     command=self.exit_frame_2)
            self.exit_frame.grid(row=5, column=1, columnspan=2, pady=10)

            self.state_1 = True

    def exit_program(self):

        if not self.state_1:
            self.root_1.quit()
            self.state_1 = False

    def exit_frame_1(self):

        if self.state_1:
            self.login_frame.destroy()
            self.state_1 = False

    def exit_frame_2(self):

        if self.state_1:
            self.register_frame.destroy()
            self.state_1 = False

    def clear_frame_1(self):

        self.username_entry.delete(0, END)
        self.pass_entry.delete(0, END)

    def confirm_login(self):

        if 4 < len(self.username_entry.get()) < 16 and 6 < len(self.pass_entry.get()) < 16:

            self.con = sqlite3.connect("database/db.db")
            self.cursor = self.con.cursor()

            self.cursor.execute("SELECT * FROM USER_DATA WHERE USERNAME_1 = ? AND PASSWORD_1 = ?",
                                (self.username_entry.get(), self.pass_entry.get()))
            self.registered_user = self.cursor.fetchall()

            if len(self.registered_user) == 0:
                messagebox.showerror("THERE IS NO SUCH USER", "INVALID USERNAME AND PASSWORD")

            else:
                messagebox.showinfo("SUCCESSFUL", "USERNAME AND PASSWORD IS CORRECT")
                self.username_entry.delete(0, END)
                self.pass_entry.delete(0, END)
                self.exit_frame_1()

                self.login_info = Label(self.root_1, text="SATEM SOFT GURURLA SUNAR")
                self.login_info.pack()

        else:

            messagebox.showerror("INVALID DATA", "YOUR USERNAME AND PASSWORD MUST BE AT LEAST 5, MAXIMUM 15 DIGITS")
            self.username_entry.delete(0, END)
            self.pass_entry.delete(0, END)

    def confirm_register(self):

        if 4 < len(self.username_entry.get()) < 16 and 6 < len(self.pass_entry.get()) < 16:

            self.con = sqlite3.connect("database/db.db")
            self.cursor = self.con.cursor()

            self.cursor.execute("SELECT USERNAME_1,PASSWORD_1 FROM USER_DATA")
            self.registered_user = self.cursor.fetchall()

            if len(self.registered_user) == self.max_user:

                messagebox.showerror("NO TRANSACTION", "HAVE A REGISTERED USER! PLEASE LOGIN!")
                self.con.close()
                self.username_entry.delete(0, END)
                self.pass_entry.delete(0, END)

            else:

                self.cursor.execute("SELECT * FROM USER_DATA WHERE USERNAME_1 = ? AND PASSWORD_1 = ?",
                                    (self.username_entry.get(), self.pass_entry.get()))
                self.registered_user = self.cursor.fetchall()

                if len(self.registered_user) == 0:

                    self.cursor.execute("INSERT INTO USER_DATA VALUES (?,?,?,?)", (self.username_entry.get(),
                                                                                   self.pass_entry.get(),
                                                                                   datetime.now(), datetime.now()))

                    self.con.commit()
                    self.con.close()

                    messagebox.showinfo("REGISTER SUCCESSFUL", "YOUR REGISTRATION IS COMPLETE")

                    self.username_entry.delete(0, END)
                    self.pass_entry.delete(0, END)

                    self.register_frame.destroy()
                    self.state_1 = False

                else:

                    messagebox.showerror("NO TRANSACTION", "HAVE A REGISTERED USER! PLEASE LOGIN!")

                    self.username_entry.delete(0, END)
                    self.pass_entry.delete(0, END)

        else:

            messagebox.showerror("INVALID DATA", "YOUR USERNAME AND PASSWORD MUST BE AT LEAST 5, MAXIMUM 15 DIGITS")
            self.username_entry.delete(0, END)
            self.pass_entry.delete(0, END)


app = Application()

Kodlarda türkçe kelime kullanmadım. Bunun sebebi, kendimi ingilizce ye maruz bırakmak. En çok vakit geçirdiğim alanda ingilizceyi geliştirmek için pratik yapmak konusunda böyle bir karar aldım. Tavsiye ederim. Faydalı oluyor.

Ekran görüntüsü 2021-01-06 210854

Kodları çalıştırınca ortaya çıkan ekran bu şekilde. Altta açık olan LOGIN SCREEN frame’i açılışta gelmiyor. Üstteki butonlar ile açılıyor. Şimdi çirkin bir görüntüsü var. Tasarım anlamında pek yetenekli olmadığımı fark ettim.

Gayet güzel çalışıyor. Feyz almak isteyenlere bir fikir olur. Kullanmak isteyenlerin işini görür diye paylaşmak istedim. Kime, ne zaman, nerede, nasıl fayda sağlayacağını bilemeyiz.

Fakat görsel anlamda çok eksiği olduğunu düşünüyorum. Görsel anlamda bu programa katkı sağlamak isteyen olursa kodların tamamını paylaştım. Katkısının sonucunu yanıt olarak buradan paylaşabilir.

LOGIN ve REGISTER butonlarına tıklandığı zaman kendi alanlarına ait altta bir Frame oluşuyor ve oluştuktan sonra LOGIN, REGISTER ve EXIT butonları çalışmıyor.

LOGIN SCREEN de kullanıcının girdiği verileri kontrol eden koşul durumları var. Bu koşul durumları sağlanmadığı takdirde kullanıcıya uyarı mesajları veriliyor. Giriş sorgularında eşleşmeyi sqlite3 de kayıtlı olan veriler arasında yapıyor.

REGISTER SCREEN de kullanıcının girdiği verileri kontrol eden koşul durumları var. Bu koşul durumları sağlanmadığı takdirde kullanıcıya uyarı mesajları veriliyor. Sistemde aynı kullanıcı adı ile oluşturulmuş bir kayıt varsa bunun da hatası belirtiliyor ve mükerrer kullanıcı adı kullanımının önüne geçiyor.

SCREEN’lerdeki EXIT butonları açık olan Frame leri kapatmak için çalışıyor sadece.

Tasarım olarak geliştirilebileceği gibi kodları da geliştirilebilir. Katkı sağlayabilirsiniz. Daha iyi hale getirebiliriz.


İngilizce istemem ben diyenler için türkçe mealini de bırakıyorum buraya

from tkinter import *
from tkinter import messagebox

import sqlite3
from datetime import datetime


class Uygulama(object):

    def __init__(self):

        self.baglanti = None  # sqlite3 dosya değişkeni
        self.imlec = None  # sqlite3 için imleç
        self.kayitli_kullanici = None  # database için kayıtlı kullanıcı listesi
        self.maksimum_kullanici = 10  # database maksimum kayıt olacak kişi sayısı

        self.ekran_1 = None  # ana pencere
        self.ekran_1_etiket = "GİRİŞ VE KAYIT OL PANELİ"  # ana pencere etikeit
        self.ekran_1_boyutlari = "325x400+100+100"  # ana encere boyut ve konumu
        self.giris_butonu = None  # giriş ekranı açmamız için gereken button değişkeni
        self.kayit_butonu = None  # kayıt ekranı açmamız için gereken button değişkeni
        self.cikis_butonu = None  # çıkış yapabilmemiz için gereken button değişkeni
        self.durum_1 = False  # ekran durumu açık mı kapalı mı
        self.giris_cercevesi = None  # giriş ekranı çerçevesi
        self.kayit_cercevesi = None  # kayıt ekranı çerçevesi

        self.kullanici_yazisi = None  # giriş ve kayıt ekranı için kullanıcı adı etiket alanı değişkeni
        self.sifre_yazisi = None  # giriş ve kayıt ekranı için şifre etiket alanı değişkeni
        self.kullanici_girdi = None  # giriş ve kayıt ekranı için kullanıcı adı yazzma alanı değişkeni
        self.sifre_girdi = None  # giriş ve kayıt ekranı için şifre yazma alanı değişkeni

        self.cerceve_temizleme = None  # çerçevelerimizi temizlemeye ihtiyacımız olan buton değişkeni
        self.cerceve_cikis = None  # çerçevelerimizden çıkış yapmaya ihtiyacımız olan buton değişkeni
        self.cerceve_onay = None  # çerçevelerimizdeki ilemleri onaylamamıza ihtiyacımız olan buton değişkeni

        self.giris_bilgisi = None  # giriş bilgisi
        self.kayit_bilgisi = None  # kayit bilgisi

        self.database()

        self.main()  # ana fonksiyon

    def database(self):

        self.baglanti = sqlite3.connect("database/db_1.db")
        self.imlec = self.baglanti.cursor()

        self.imlec.execute("CREATE TABLE IF NOT EXISTS KULLANICI_BILGILERI (KULLANICI_ADI TEXT, SIFRE TEXT,"
                            "KAYIT_TARIHI TEXT, SON_GIRIS TEXT)")
        self.baglanti.commit()

        self.baglanti.close()

    def main(self):
        self.ekran_1 = Tk()
        self.ekran_1.geometry(self.ekran_1_boyutlari)
        self.ekran_1.title(self.ekran_1_etiket)
        self.ekran_1.resizable(FALSE, FALSE)

        self.giris_butonu = Button(self.ekran_1, text="GİRİŞ", width=10, command=self.giris_ekrani)
        self.giris_butonu.pack(side=TOP, pady=25)

        self.kayit_butonu = Button(self.ekran_1, text="KAYIT", width=10, command=self.kayit_ekrani)
        self.kayit_butonu.pack(side=TOP)

        self.cikis_butonu = Button(self.ekran_1, text="ÇIKIŞ", width=10, command=self.cikis_program)
        self.cikis_butonu.pack(side=TOP, pady=25)

        self.durum_1 = False

        mainloop()

    def giris_ekrani(self):

        if not self.durum_1:
            self.giris_cercevesi = Frame(self.ekran_1, bd=5, relief=RAISED)
            self.giris_cercevesi.pack(pady=10)

            self.giris_bilgisi = Label(self.giris_cercevesi, text="GİRİŞ EKRANI", width=42)
            self.giris_bilgisi.grid(row=1, column=1, columnspan=2)

            self.kullanici_yazisi = Label(self.giris_cercevesi, text="KULLANICI ADI >>", width=20)
            self.kullanici_yazisi.grid(row=2, column=1)
            self.sifre_yazisi = Label(self.giris_cercevesi, text="ŞİFRE >>", width=20)
            self.sifre_yazisi.grid(row=3, column=1)

            self.kullanici_girdi = Entry(self.giris_cercevesi, width=20)
            self.kullanici_girdi.grid(row=2, column=2)
            self.sifre_girdi = Entry(self.giris_cercevesi, width=20, show="*")
            self.sifre_girdi.grid(row=3, column=2)

            self.cerceve_onay = Button(self.giris_cercevesi, text="ONAY", width=20, bd=2, relief=RAISED,
                                       command=self.giris_onay)
            self.cerceve_onay.grid(row=4, column=1, pady=10)

            self.cerceve_temizleme = Button(self.giris_cercevesi, text="TEMİZLE", width=20, bd=2, relief=RAISED,
                                            command=self.cerceve_temizlemex)
            self.cerceve_temizleme.grid(row=4, column=2)

            self.cerceve_cikis = Button(self.giris_cercevesi, text="ÇIKIŞ", width=42, bd=2, relief=RAISED,
                                        command=self.cikis_cerceve_1)
            self.cerceve_cikis.grid(row=5, column=1, columnspan=2, pady=10)

            self.durum_1 = True

    def kayit_ekrani(self):

        if not self.durum_1:
            self.kayit_cercevesi = Frame(self.ekran_1, bd=5, relief=RAISED)
            self.kayit_cercevesi.pack(pady=10)

            self.kayit_bilgisi = Label(self.kayit_cercevesi, text="KAYIT EKRANI", width=42)
            self.kayit_bilgisi.grid(row=1, column=1, columnspan=2)

            self.kullanici_yazisi = Label(self.kayit_cercevesi, text="KULLANICI ADI >>", width=20)
            self.kullanici_yazisi.grid(row=2, column=1)
            self.sifre_yazisi = Label(self.kayit_cercevesi, text="ŞİFRE >>", width=20)
            self.sifre_yazisi.grid(row=3, column=1)

            self.kullanici_girdi = Entry(self.kayit_cercevesi, width=20)
            self.kullanici_girdi.grid(row=2, column=2)
            self.sifre_girdi = Entry(self.kayit_cercevesi, width=20, show="*")
            self.sifre_girdi.grid(row=3, column=2)

            self.cerceve_onay = Button(self.kayit_cercevesi, text="ONAY", width=20, bd=2, relief=RAISED,
                                       command=self.kayit_onay)
            self.cerceve_onay.grid(row=4, column=1, pady=10)

            self.cerceve_temizleme = Button(self.kayit_cercevesi, text="TEMİZLE", width=20, bd=2, relief=RAISED,
                                            command=self.cerceve_temizlemex)
            self.cerceve_temizleme.grid(row=4, column=2)

            self.cerceve_cikis = Button(self.kayit_cercevesi, text="ÇIKIŞ", width=42, bd=2, relief=RAISED,
                                        command=self.cikis_cerceve_2)
            self.cerceve_cikis.grid(row=5, column=1, columnspan=2, pady=10)

            self.durum_1 = True

    def cikis_program(self):

        if not self.durum_1:
            self.ekran_1.quit()
            self.durum_1 = False

    def cikis_cerceve_1(self):

        if self.durum_1:
            self.giris_cercevesi.destroy()
            self.durum_1 = False

    def cikis_cerceve_2(self):

        if self.durum_1:
            self.kayit_cercevesi.destroy()
            self.durum_1 = False

    def cerceve_temizlemex(self):

        self.kullanici_girdi.delete(0, END)
        self.sifre_girdi.delete(0, END)

    def giris_onay(self):

        if 4 < len(self.kullanici_girdi.get()) < 16 and 6 < len(self.sifre_girdi.get()) < 16:

            self.baglanti = sqlite3.connect("database/db_1.db")
            self.imlec = self.baglanti.cursor()

            self.imlec.execute("SELECT * FROM KULLANICI_BILGILERI WHERE KULLANICI_ADI = ? AND SIFRE = ?",
                               (self.kullanici_girdi.get(), self.sifre_girdi.get()))
            self.kayitli_kullanici = self.imlec.fetchall()

            if len(self.kayitli_kullanici) == 0:
                messagebox.showerror("GEÇERSİZ VERİ", "BÖYLE BİR KULLANICI YOK")

            else:
                self.baglanti.close()
                messagebox.showinfo("BAŞARILI", "KULLANICI ADI VE ŞİFRESİ DOĞRU")
                self.kullanici_girdi.delete(0, END)
                self.sifre_girdi.delete(0, END)
                self.cikis_cerceve_1()

                self.giris_bilgisi = Label(self.ekran_1, text="SATEM SOFT GURURLA SUNAR")
                self.giris_bilgisi.pack()

        else:

            messagebox.showerror("GEÇERSİZ VERİ", "KULLANICI ADINIZ VE ŞİFRENİZ EN AZ 5 EN ÇOK 15 KARAKTERDEN OLUŞMALIDIR.")
            self.kullanici_girdi.delete(0, END)
            self.sifre_girdi.delete(0, END)

    def kayit_onay(self):

        if 4 < len(self.kullanici_girdi.get()) < 16 and 6 < len(self.sifre_girdi.get()) < 16:

            self.baglanti = sqlite3.connect("database/db_1.db")
            self.imlec = self.baglanti.cursor()

            self.imlec.execute("SELECT KULLANICI_ADI,SIFRE FROM KULLANICI_BILGILERI")
            self.kayitli_kullanici = self.imlec.fetchall()

            if len(self.kayitli_kullanici) == self.maksimum_kullanici:

                messagebox.showerror("GEÇERSİZ VERİ", "MEVCUT KULLANICI! LÜTFEN GİRİŞ YAPINIZ!")
                self.baglanti.close()
                self.kullanici_girdi.delete(0, END)
                self.sifre_girdi.delete(0, END)

            else:

                self.imlec.execute("SELECT * FROM KULLANICI_BILGILERI WHERE KULLANICI_ADI = ? AND SIFRE = ?",
                                   (self.kullanici_girdi.get(), self.sifre_girdi.get()))
                self.kayitli_kullanici = self.imlec.fetchall()

                if len(self.kayitli_kullanici) == 0:

                    self.imlec.execute("INSERT INTO KULLANICI_BILGILERI VALUES (?,?,?,?)", (self.kullanici_girdi.get(),
                                                                                  self.sifre_girdi.get(),
                                                                                  datetime.now(), datetime.now()))

                    self.baglanti.commit()
                    self.baglanti.close()

                    messagebox.showinfo("KAYIT BASARILI", "KAYIT BAŞARIYLA TAMAMLANDI")

                    self.kullanici_girdi.delete(0, END)
                    self.sifre_girdi.delete(0, END)

                    self.kayit_cercevesi.destroy()
                    self.durum_1 = False

                else:

                    messagebox.showerror("GEÇERSİZ VERİ", "MEVCUT KULLANICI ADI!")

                    self.kullanici_girdi.delete(0, END)
                    self.sifre_girdi.delete(0, END)

        else:

            messagebox.showerror("GEÇERSİZ VERİ", "KULLANICI ADINIZ VE ŞİFRENİZ EN AZ 5 EN ÇOK 15 KARAKTERDEN OLUŞMALIDIR.")
            self.kullanici_girdi.delete(0, END)
            self.sifre_girdi.delete(0, END)


app = Uygulama()
4 Beğeni

Bende bu şekilde bir görüntü oluşuyor.

image

Niye öyle oldu ki şimdi

Bende de oyle.

ss

Ikisi de Linux bu arada. (Ben gnome/wayland, Fedora 33)

1 Beğeni

Neyi eksik yaptım da görüntü böyle bozuk görünüyor?

Sanırım, pencerenin boyutu küçük kalmış. Frame, sonradan açıldığı için de, otomatik boyutlanmamış.

Kullanılan uzunluk ölçü birimi yanlış. Butonlarda kullanılan width parametresi, pixel olarak değil, karakter uzunluğu olarak belirlenen bir parametre. giris_ekrani metodunun içerisinde bulunan widget’ların width parametlerini yarı yarıya düşürdüğümde şöyle bir ekran görüntüsü geliyor. Buradaki giriş çerçevesi bende biraz küçükken, sizin bilgisayarınızda belki çok daha küçük görünecektir.

image

4 Beğeni

Evrensel olarak tasarlamak istersek ne yapmamız gerekecek?

Şimdilik pixel bazlı bir ölçüm kullanmak gayet iyi bir çözüm olabilir. pack yerine place kullanarak zaten genişliği ve yüksekliği belli olan bir pencereye widget’ları yerleştirebilirsiniz örneğin. Aklıma gelen ilk çözüm bu. Belki daha iyi bir çözüm vardır, tkinter’ı kullanmayalı baya oldu.

buton.place(x = 10,y = 10, width=200, height=100)
1 Beğeni
from tkinter import *
from tkinter import messagebox

import sqlite3
from datetime import datetime


class Application(object):

    def __init__(self):

        self.con = None  # sqlite3 file variable
        self.cursor = None  # sqlite3 for need cursor
        self.registered_user = None  # database registered user list
        self.max_user = 10  # database have maximum register user

        self.root_1 = None  # main window
        self.root_1_title = "LOGIN AND REGISTER"  # main window title
        self.root_1_geo = "325x400+100+100"  # main window width and height and location
        self.login_button = None  # we need open login screen
        self.register_button = None  # we need open register screen
        self.exit_button = None  # we need exit program
        self.state_1 = False  # screen state open or close
        self.login_frame = None  # login screen for frame
        self.register_frame = None  # register screen for frame

        self.username_label = None  # login and register for username title zone
        self.pass_label = None  # login and register for password title zone
        self.username_entry = None  # login and register for username entry zone
        self.pass_entry = None  # login and register for password entry zone

        self.clear_frame = None  # we need entry clear for frame
        self.exit_frame = None  # we need exit for frame
        self.confirm_frame = None  # we need to confirm

        self.login_info = None  # login info
        self.register_info = None  # register info

        self.database()

        self.main()  # main function

    def database(self):

        self.con = sqlite3.connect("database/db.db")
        self.cursor = self.con.cursor()

        self.cursor.execute("CREATE TABLE IF NOT EXISTS USER_DATA (USERNAME_1 TEXT, PASSWORD_1 TEXT,"
                            "REGISTER_DATE TEXT, LAST_LOGIN TEXT)")
        self.con.commit()

        self.con.close()

    def main(self):
        self.root_1 = Tk()
        self.root_1.geometry(self.root_1_geo)
        self.root_1.title(self.root_1_title)
        self.root_1.resizable(FALSE, FALSE)

        self.login_button = Button(self.root_1, text="LOGIN", width=10, command=self.login_screen)
        self.login_button.pack(side=TOP, pady=25)

        self.register_button = Button(self.root_1, text="REGISTER", width=10, command=self.register_screen)
        self.register_button.pack(side=TOP)

        self.exit_button = Button(self.root_1, text="EXIT", width=10, command=self.exit_program)
        self.exit_button.pack(side=TOP, pady=25)

        self.state_1 = False

        mainloop()

    def login_screen(self):

        if not self.state_1:
            self.login_frame = Frame(self.root_1, bd=5, relief=RAISED)
            self.login_frame.pack(pady=10)

            self.login_info = Label(self.login_frame, text="LOGIN SCREEN", width=42)
            self.login_info.grid(row=1, column=1, columnspan=2)

            self.username_label = Label(self.login_frame, text="USERNAME >>", width=20)
            self.username_label.grid(row=2, column=1)
            self.pass_label = Label(self.login_frame, text="PASSWORD >>", width=20)
            self.pass_label.grid(row=3, column=1)

            self.username_entry = Entry(self.login_frame, width=20)
            self.username_entry.grid(row=2, column=2)
            self.pass_entry = Entry(self.login_frame, width=20, show="*")
            self.pass_entry.grid(row=3, column=2)

            self.confirm_frame = Button(self.login_frame, text="CONFIRM", width=20, bd=2, relief=RAISED,
                                        command=self.confirm_login)
            self.confirm_frame.grid(row=4, column=1, pady=10)

            self.clear_frame = Button(self.login_frame, text="CLEAR", width=20, bd=2, relief=RAISED,
                                      command=self.clear_frame_1)
            self.clear_frame.grid(row=4, column=2)

            self.exit_frame = Button(self.login_frame, text="EXIT", width=42, bd=2, relief=RAISED,
                                     command=self.exit_frame_1)
            self.exit_frame.grid(row=5, column=1, columnspan=2, pady=10)

            self.state_1 = True

    def register_screen(self):

        if not self.state_1:
            self.register_frame = Frame(self.root_1, bd=5, relief=RAISED)
            self.register_frame.place(x=5, y=170, width=315, height=150)

            self.register_info = Label(self.register_frame, text="REGISTER SCREEN", width=42)
            self.register_info.grid(row=1, column=1, columnspan=2)

            self.username_label = Label(self.register_frame, text="USERNAME >>", width=20)
            self.username_label.grid(row=2, column=1)
            self.pass_label = Label(self.register_frame, text="PASSWORD >>", width=20)
            self.pass_label.grid(row=3, column=1)

            self.username_entry = Entry(self.register_frame, width=20)
            self.username_entry.grid(row=2, column=2)
            self.pass_entry = Entry(self.register_frame, width=20, show="*")
            self.pass_entry.grid(row=3, column=2)

            self.confirm_frame = Button(self.register_frame, text="CONFIRM", bd=2, relief=RAISED,
                                        command=self.confirm_register)
            self.confirm_frame.place(x=10, y=65, width=140, height=25)

            self.clear_frame = Button(self.register_frame, text="CLEAR", bd=2, relief=RAISED,
                                      command=self.clear_frame_1)
            self.clear_frame.place(x=160, y=65, width=140, height=25)

            self.exit_frame = Button(self.register_frame, text="EXIT", bd=2, relief=RAISED,
                                     command=self.exit_frame_2)
            self.exit_frame.place(x=10, y=95, width=290, height=25)

            self.state_1 = True

    def exit_program(self):

        if not self.state_1:
            self.root_1.quit()
            self.state_1 = False

    def exit_frame_1(self):

        if self.state_1:
            self.login_frame.destroy()
            self.state_1 = False

    def exit_frame_2(self):

        if self.state_1:
            self.register_frame.destroy()
            self.state_1 = False

    def clear_frame_1(self):

        self.username_entry.delete(0, END)
        self.pass_entry.delete(0, END)

    def confirm_login(self):

        if 4 < len(self.username_entry.get()) < 16 and 6 < len(self.pass_entry.get()) < 16:

            self.con = sqlite3.connect("database/db.db")
            self.cursor = self.con.cursor()

            self.cursor.execute("SELECT * FROM USER_DATA WHERE USERNAME_1 = ? AND PASSWORD_1 = ?",
                                (self.username_entry.get(), self.pass_entry.get()))
            self.registered_user = self.cursor.fetchall()

            if len(self.registered_user) == 0:
                messagebox.showerror("THERE IS NO SUCH USER", "INVALID USERNAME AND PASSWORD")

            else:
                messagebox.showinfo("SUCCESSFUL", "USERNAME AND PASSWORD IS CORRECT")
                self.username_entry.delete(0, END)
                self.pass_entry.delete(0, END)
                self.exit_frame_1()

                self.login_info = Label(self.root_1, text="SATEM SOFT GURURLA SUNAR")
                self.login_info.pack()

        else:

            messagebox.showerror("INVALID DATA", "YOUR USERNAME AND PASSWORD MUST BE AT LEAST 5, MAXIMUM 15 DIGITS")
            self.username_entry.delete(0, END)
            self.pass_entry.delete(0, END)

    def confirm_register(self):

        if 4 < len(self.username_entry.get()) < 16 and 6 < len(self.pass_entry.get()) < 16:

            self.con = sqlite3.connect("database/db.db")
            self.cursor = self.con.cursor()

            self.cursor.execute("SELECT USERNAME_1,PASSWORD_1 FROM USER_DATA")
            self.registered_user = self.cursor.fetchall()

            if len(self.registered_user) == self.max_user:

                messagebox.showerror("NO TRANSACTION", "HAVE A REGISTERED USER! PLEASE LOGIN!")
                self.con.close()
                self.username_entry.delete(0, END)
                self.pass_entry.delete(0, END)

            else:

                self.cursor.execute("SELECT * FROM USER_DATA WHERE USERNAME_1 = ? AND PASSWORD_1 = ?",
                                    (self.username_entry.get(), self.pass_entry.get()))
                self.registered_user = self.cursor.fetchall()

                if len(self.registered_user) == 0:

                    self.cursor.execute("INSERT INTO USER_DATA VALUES (?,?,?,?)", (self.username_entry.get(),
                                                                                   self.pass_entry.get(),
                                                                                   datetime.now(), datetime.now()))

                    self.con.commit()
                    self.con.close()

                    messagebox.showinfo("REGISTER SUCCESSFUL", "YOUR REGISTRATION IS COMPLETE")

                    self.username_entry.delete(0, END)
                    self.pass_entry.delete(0, END)

                    self.register_frame.destroy()
                    self.state_1 = False

                else:

                    messagebox.showerror("NO TRANSACTION", "HAVE A REGISTERED USER! PLEASE LOGIN!")

                    self.username_entry.delete(0, END)
                    self.pass_entry.delete(0, END)

        else:

            messagebox.showerror("INVALID DATA", "YOUR USERNAME AND PASSWORD MUST BE AT LEAST 5, MAXIMUM 15 DIGITS")
            self.username_entry.delete(0, END)
            self.pass_entry.delete(0, END)


app = Application()

deneme imkanınız var mı arkadaşlar?

Login ekranı halen aynı. Register ekranı düzelmiş ama entry’ler dışarı taşıyor.

image

Tamamdır. Önerdiğiniz çözüm işe yarıyor demek ki. Kodları ona göre düzenleyeceğim. Teşekkür ederim.

1 Beğeni

Bu arada görsel tasarım için tavsiyem, butonlar için hazır görsel kullanmak. Mesela ben bir tane sizin için tasarladım, beğenir misiniz bilmem :sweat_smile:

image

Bir tane de ingilizce versiyon :smiley:

image

2 Beğeni

Türkçe olupta ş harfini desteklememesi hariç her şey on numara beş yıldız :sweat_smile:

1 Beğeni

İngilizce sistemde Türkçe tasarım yapmak işte :joy:

1 Beğeni

zaten meal dedim :smiley: ingilizce kullanmamız daha iyi aslında

Evet bu da güzel olabilir. Daha şık görünür. Bununla da ilgileneceğim

1 Beğeni

Ben @coderistan’ın yaptığı logo hakkında konuştum :slight_smile:

1 Beğeni