Python3 Tkinter, PyperClip, Random, String: Parola Oluşturucu Yapmak, Create a Password Generator

Python 3 ile beraber yüklenen Tkinter modülü ile grafiksel kullanıcı arayüzüne sahip programlar yapabiliriz. Tkinter için Visual Studio gibi arayüzde bulunan araçları sürükleyip bıraktığımız, yerlerini değiştirebildiğimiz bir yapı söz konusu değil. Programdaki araçları kodlarla arayüze getirip istersek kodlarla konumlarını ayarlayabiliriz. Parola oluşturucuda kullanıcıdan parola uzunluğunu alacağımız bir Entry, oluşturulan parolayı yazacağımız başka bir Entry, hangi karakterlerin kullanılacağını seçtirmek için 3 tane CheckBox ve 2 tane de Button kullanacağız.
Oluşturduğumuz parolayı kopyalamak için yani clipboard kopyalama fonksiyonunu kullanmak için 'pyperclip' kütüphanesini kullanacağız. Açılan sitede 'pyperclip' kütüphanesinin nasıl kurulacağını okuyabilirsiniz.




Penceremizi Yaratmak

Pencereyi yaratmadan önce uygulamamıza dahil etmemiz gereken Tkinter hariç 3 kütüphane var. Ve daha sonra sınıfımızı oluşturacağız.

import random
import string
import pyperclip
from tkinter import *
class Main:
    def __init__(self, master):
        self.master = master
        master.title('Parola Oluşturucu')

        self.parolaUzunluguL = Label(master, text="parola uzunluğu:")
        self.parolaUzunluguL.grid(row=0, column=0, pady=4, padx=12, sticky=EW)
        self.defaultValue = StringVar(master, '8')
        self.parolaUzunluguE = Entry(master, textvariable=self.defaultValue)
        self.parolaUzunluguE.grid(row=0, column=1,columnspan=2, padx=12, sticky=E)

        self.harfBool = IntVar()
        self.harfBool.set(True)
        self.checkHarf = Checkbutton(master, text="harfler", variable = self.harfBool)
        self.checkHarf.grid(row=1, column=0, pady=4, sticky=EW)

        self.rakamBool = IntVar()
        self.rakamBool.set(True)
        self.checkRakam = Checkbutton(master, text="rakamlar", variable=self.rakamBool)
        self.checkRakam.grid(row=1, column=1, pady=4, sticky=EW)

        self.noktalamaBool = IntVar()
        self.noktalamaBool.set(True)
        self.checkNoktalama = Checkbutton(master, text="noktalamalar", variable=self.noktalamaBool)
        self.checkNoktalama.grid(row=1, column=2, pady=4, sticky=EW)

        self.olusturB = Button(master, text='oluştur', command=self.parolaOlustur)
        self.olusturB.grid(pady=4, padx=12, sticky=EW, columnspan=3, row=2, column=0)

        self.olusturulanParola = Entry(master)
        self.olusturulanParola.grid(pady=8, padx=12, row=3, column=0, columnspan=2, sticky= EW)

        self.kopyala = Button(master, text="kopyala", command = self.parolayiKopyala)
        self.kopyala.grid(pady=8, padx=12, row=3, column=2, sticky=EW)

root = Tk()
main = Main(root)
root.mainloop()

Gerekli Methodları Yazmak

1-Parola Oluşturma Methodu:

Parola oluştururken ilk önce kullanıcımızın istediği parola uzunluğunu Entry widget'ından alacağız. Burada Entry'den aldığımız veriyi integer tipine dönüştürmemiz gerekiyor. Daha sonra karakter setlerini Checkbox değerlerine göre belirleyeceğiz. Eğer rakamlar CheckBox'u seçili değilse, rakamlar değişkenimiz boş olacak. Ve diğer ikisini de böyle belirliyoruz. For döngüsü ile rastgele seçtiğimiz karakterleri parola değişkenimize ekleyeceğiz. Ve en sonunda oluşturulan parolayı göstereceğimiz Entry'e bunu yazacağız.

    def parolaOlustur(self):
        parolaUzunlugu = int(self.parolaUzunluguE.get())
        harfler = string.ascii_letters if self.harfBool.get() else ""
        rakamlar = string.digits if self.rakamBool.get() else ""
        noktalama = string.punctuation if self.noktalamaBool.get() else ""
        parola = ""
        for i in range(parolaUzunlugu):
            randChar = random.choice(harfler+rakamlar+noktalama)
            parola += randChar
        self.olusturulanParola.delete(0, END)
        self.olusturulanParola.insert(END, parola)

2-Oluşan Parolayı Clipboard'a Kopyalamak:

Oluşturduğumuz ve Entry widget'ına yazdırdığımız parolayı kullanıcının daha kolay kullanması için 'pyperclip' kütüphanesini kullanarak kopyalama işlemini yapacağız. Tabii bunun için önce pyperclip kütüphanesi yüklememiz gerekiyor. Yükledikten sonra uygulama içinde kullanabiliriz. Böyle işlemleri daha kolay yapmak için PyCharm IDE'sini kullanabilirsiniz ki ben öyle yapıyorum. PyCharm'ın ücretsiz Community Edition'u mevcut.


    def parolayiKopyala(self):
        pyperclip.copy(self.olusturulanParola.get())

Programımızın Son Hali




import random
import string
import pyperclip
from tkinter import *
class Main:
    def __init__(self, master):
        self.master = master
        master.title('Parola Oluşturucu')

        self.parolaUzunluguL = Label(master, text="parola uzunluğu:")
        self.parolaUzunluguL.grid(row=0, column=0, pady=4, padx=12, sticky=EW)
        self.defaultValue = StringVar(master, '8')
        self.parolaUzunluguE = Entry(master, textvariable=self.defaultValue)
        self.parolaUzunluguE.grid(row=0, column=1,columnspan=2, padx=12, sticky=E)

        self.harfBool = IntVar()
        self.harfBool.set(True)
        self.checkHarf = Checkbutton(master, text="harfler", variable = self.harfBool)
        self.checkHarf.grid(row=1, column=0, pady=4, sticky=EW)

        self.rakamBool = IntVar()
        self.rakamBool.set(True)
        self.checkRakam = Checkbutton(master, text="rakamlar", variable=self.rakamBool)
        self.checkRakam.grid(row=1, column=1, pady=4, sticky=EW)

        self.noktalamaBool = IntVar()
        self.noktalamaBool.set(True)
        self.checkNoktalama = Checkbutton(master, text="noktalamalar", variable=self.noktalamaBool)
        self.checkNoktalama.grid(row=1, column=2, pady=4, sticky=EW)

        self.olusturB = Button(master, text='oluştur', command=self.parolaOlustur)
        self.olusturB.grid(pady=4, padx=12, sticky=EW, columnspan=3, row=2, column=0)

        self.olusturulanParola = Entry(master)
        self.olusturulanParola.grid(pady=8, padx=12, row=3, column=0, columnspan=2, sticky= EW)

        self.kopyala = Button(master, text="kopyala", command = self.parolayiKopyala)
        self.kopyala.grid(pady=8, padx=12, row=3, column=2, sticky=EW)
        
        self.kodlardan1Blog = Button(master, text="kodlardan 1 blog")
        self.kodlardan1Blog.grid(row=4, sticky = EW, column=0, columnspan=3, pady=8, padx=12)
    def parolaOlustur(self):
        parolaUzunlugu = int(self.parolaUzunluguE.get())
        harfler = string.ascii_letters if self.harfBool.get() else ""
        rakamlar = string.digits if self.rakamBool.get() else ""
        noktalama = string.punctuation if self.noktalamaBool.get() else ""
        parola = ""
        for i in range(parolaUzunlugu):
            randChar = random.choice(harfler+rakamlar+noktalama)
            parola += randChar
        self.olusturulanParola.delete(0, END)
        self.olusturulanParola.insert(END, parola)

    def parolayiKopyala(self):
        pyperclip.copy(self.olusturulanParola.get())

root = Tk()
main = Main(root)
root.mainloop()


Yorum Gönder

2 Yorumlar