Merhabalar bir programa gui yaparken karşılaştığım bazı hatalar var

Merhabalar nasılsınız, umarım iyisinizdir. Kodda sürekli bir hata var neyi nasıl yapmalıyım bu hataları nasıl başarıya çeviririm bilgilendirirseniz sevinirim.

import tkinter as tk

import random

import string

rakam = string.digits

harf = string.ascii_letters

sembol = string.punctuation

root = tk.Tk()

root.title("Random Şifre Oluşturucu")

root.geometry("600x400+250+250")

root.resizable(0,0)

root.config(bg="black")

message = tk.Label(root)

message.config(text="Seçenekleri seçip şifre oluşturunuz", bg="black",fg="brown",font=("Calibri Italic",14) )

message.pack()

x = tk.IntVar()

y = tk.IntVar()

z = tk.IntVar()

def seçenekler():

    want_rakam = x.get()

    want_harf = y.get()

    want_sembol = z.get()

    birleşim = ""

    birleşim += rakam if want_rakam else ""

    birleşim += harf if want_harf else ""

    birleşim += sembol if want_sembol else ""

    return birleşim

sec = seçenekler()

sıfre = tk.Label(root)

sıfre.config(text="Random Şifreniz: ", bg="black",fg="gray",font=("Calibri Italic", 14))

sıfre.place(x=20,y=70)

cbox_rakam = tk.Checkbutton(text="Şifreniz de rakam olsun mu ",variable=x,onvalue=True,offvalue=False,command=seçenekler())

cbox_harf = tk.Checkbutton(text="Şifreniz de harf olsun mu ", variable=y,onvalue=True,offvalue=False,command=seçenekler())

cbox_sembol = tk.Checkbutton(text="Şifreniz de sembol olsun mu ", variable=z,onvalue=True,offvalue=False,command=seçenekler())

cbox_rakam.place(x=10,y=250)

cbox_harf.place(x=210,y=250)

cbox_sembol.place(x=400,y=250)

uznuluk_label = tk.Label(root)

uznuluk_label.config(text="Uzunluk Giriniz: ",bg="black",fg="gray",font=("Calibri Italic",14))

uznuluk_label.place(x=20,y=175)

uzunlukgir = tk.Entry(width=10)

uzunlukgir.place(x=180,y=180)

def uzunluk():

    uzunlukgirr = uzunlukgir.get()

    return uzunlukgirr

by = tk.Label(root)

by.config(text="****_____****   -_-_-_-_-_-_- ",bg="black",fg="red",font=("Italic",16))

by.place(x=10,y=350)

def sifre_olusturucu(lengths,choises):

    kombinasyonlar  = seçenekler

    uzun = uzunluk()

    random_pass = random.choices(kombinasyonlar, k=uzun)

    random_pass = "".join(random_pass)

    return random_pass

buton = tk.Button(text="Şifre Oluştur", bg="gray",fg="black",font=("Calibri Italic",14),command=sifre_olusturucu(uzunluk,sec))

buton.place(x=400,y=350)

root.mainloop()

Merhaba, hoş geldiniz. Teşekkürler siz de iyisinizdir umarım.

Rica etsem kodunuza kod görünümü kazandırabilir misiniz?

```
Kodlar bu aralığa yazılacak.
```

Örnek:

for i in range(10):
    print(i)

Yazılan kodun renklendirilmesini python’a göre yapılmasını istiyorsanız çentiklerin yanına python yazmalısınız:

```python
for i in range(10):
    print("hello")
```

teşekkür ederim, konu hakkında bilgin var mı :smiley: bütün gündür bunla uğraşıyorum

Kodunuza bakıyorum şimdi.

Şimdilik tespit edebildiğim ilk hata aşağıdaki kodda yer alıyor.

buton = tk.Button(text="Şifre Oluştur", bg="gray",fg="black",font=("Calibri Italic",14),command=sifre_olusturucu(uzunluk,sec))

Button'un command parametresi sifre_olusturucu isimli fonksiyonu çağırıyor. Oysa fonksiyonun adres olarak atanması gerekiyordu. Yani şöyle düzeltmeniz lazım:

command=lambda: sifre_olusturucu(uzunluk,sec)
buton = tk.Button(text="Şifre Oluştur", bg="gray",fg="black",font=("Calibri Italic",14),command=lambda: sifre_olusturucu(uzunluk,sec))

hatalar dünyası gibi adeta ama daha yeni python derslerini bitirip ilk defa kendim bir uygulamayla gui birleştirmeye çalıştım da çok fazla hata var :smiley:

Reis, üzerime düşmez ve biraz kabalık etmiş gibi olacak ama, yeni başlayan biri lambda’yı ne eğitimde, ne de yeni başlayanlar için yapılmış örnek projelerde görür.

kanka yeni başlayan derken 100 serilik bir video bitirdim gördüm :smiley: ama pratik az, ondan dolayı eklemeyi unutmuşum

İleri düzey lambda fonksiyonunu da öğretti mi?

arin yazılımın serisinden izledim öğretti

Yaptım arkadaşlar belki benim gibi bulamayanlar olmuştur, şunu öğrendim zor değil basit düşünmek lazım kafada büyütünce uzuyor gidiyor. lambda yardımı çok işime yaradı bu arada <3

Bide labeli seçemiyoruz seçip direkt kopyalamak için ne yapmalıyız

import tkinter as tk
import random
import string

rakam = string.digits
harf = string.ascii_letters
sembol = string.punctuation



root = tk.Tk()
root.title("Random Şifre Oluşturucu")
root.geometry("750x500+250+250")
root.config(bg="black")
message_label = tk.Label(root)
message_label.config(text="Şifre Oluşturucu'ya Hoş Geldiniz..",bg="black",fg="red",font=("Calibri Italic",14))
message_label.pack()






    

def secim_aktif():
    want_rakam = c1.get()
    want_harf = c2.get()
    want_sembol = c3.get()
    x = [want_rakam,want_harf,want_sembol]

    birleşim = ""
    birleşim += rakam if x[0] else ""
    birleşim += harf if x[1] else ""
    birleşim += sembol if x[2] else ""
    return birleşim



uzunluktext = tk.Label(root)
uzunluktext.config(text="Şifrenizin Uzunluğunu Giriniz: ",bg="black",fg="red",font=("Calibri Italic",14))
uzunluktext.place(x=20,y=175)

uzunlukal = tk.Entry(width=10)
uzunlukal.place(x=270,y=180)

def uzunluk():
    length = int(uzunlukal.get())
    return length

c1 = tk.IntVar()
c2 = tk.IntVar()
c3 = tk.IntVar()

check_rakam = tk.Checkbutton(text="Şifreniz de rakam olmasını istermisiniz",variable=c1,onvalue=True,offvalue=False,command=secim_aktif())
check_harf = tk.Checkbutton(text="Şifreniz de harf olmasını istermisiniz",variable=c2,onvalue=True,offvalue=False,command=secim_aktif())
check_sembol = tk.Checkbutton(text="Şifreniz de sembol olmasını istermisiniz",variable=c3,onvalue=True,offvalue=False,command=secim_aktif())
check_rakam.place(x=10,y=250)
check_harf.place(x=250,y=250)
check_sembol.place(x=500,y=250)

password_text = tk.Label(root)
password_text.config(text="Şifreniz:  ",bg="black",fg="red",font=("Calibri Italic",14))
password_text.place(x=20, y=50)

password_text1 = tk.Label(root)
password_text1.config(text="Şifreyi Oluşturmadınız",bg="black",fg="green",font=("Calibri Italic",16))
password_text1.place(x=300, y=50)

def şifre_oluşturucu(length,choices):
    kombinasyon = secim_aktif()
    random_password = random.choices(kombinasyon, k=uzunluk())
    random_password = "".join(random_password)
    password_text1["text"] = str(random_password)
    return password_text1["text"]
    


password_text = tk.Label(root)
password_text.config(text="Şifreniz:  ",bg="black",fg="red",font=("Calibri Italic",14))
password_text.place(x=20, y=50)







kombinasyon = secim_aktif()
buton = tk.Button(text="Şifre Oluştur",bg="gray",fg="red",font=("Calibri Italic",14),command=lambda:şifre_oluşturucu(uzunluk,kombinasyon))
buton.place(x=600,y=350)

root.mainloop()


@throwaway1,

Tamam, sizin vesilenizle lambda'ya alternatif bir fonksiyonun nasıl yazılacağını göstermeye çalışayım.

@ismet_kopuz arkadaşım orada command parametresine bir fonksiyonun adresini yazmanız gerekiyordu. Ama siz doğrudan fonksiyonu çağırıyordunuz. Çağırdığınız fonksiyon parametre alan bir fonksiyondu. Ve doğal olarak bu parametrelere değer atamak için fonksiyonu çağırmak zorunda hissettiniz ama bu da tk.Button tanımlanır tanımlanmaz, fonksiyonun çalışmasına sebep oldu.

Normalde tk.Button'un command parametresine fonksiyonların adresi atanır. Düğmeye basıldığı anda da bu fonksiyonlar çağrılır.

tk.Button(command=fonksiyon)

Ama eğer fonksiyonumuz parametre alıyorsa, bu fonksiyonu döndüren başka bir fonksiyonun adresi command parametresinin değeri haline getirilebilir.

tk.Button(command=lambda: fonksiyon(parametre))

Yukarıdaki durumda, command fonksiyonuna, lambda fonksiyonunun adresi atanır. Ve düğmeye basıldığında lambda fonksiyonu çalışır ve lambda fonksiyonu fonksiyon isimli fonksiyonu return ettiği için fonksiyon isimli fonksiyon da çağrılmış olur.

command parametresine adresini atamak istediğimiz fonksiyon lambda olmak zorunda değil, şöyle de yapabiliriz.

def f(user):
    def fonksiyon():
        print("Hello", user)
    return fonksiyon

Yukarıdaki f fonksiyonu fonksiyon isimli fonksiyonun adresini geri döndürür ve f fonksiyonuna verilen parametre fonksiyon isimli fonksiyonda kullanılır. Dolayısıyla tk.Button'un command parametresine değeri şu şekilde verebiliriz:

tk.Button(command=f("Ali"))

Yukarıdaki ifadede f fonksiyonu hemen çalışacaktır ve içteki fonksiyon isimli fonksiyonun adresi geri döndürülecektir, yani içteki fonksiyon isimli fonksiyon düğmeye basılmadığı sürece çağrılmayacaktır.