Tkinter Buton ile ilgili bir Soru

Çoğu programlardan aşına olduğumuz “Bunu birdaha gösterme” gibi işaretlediğimiz zaman öyle bir pencere bir daha çıkmıyor ya bizimde böyle yapmamız muhtemel mi. Ve nasıl yapabiliriz bi örnekle anlatırmısınız.

Atıyorum programa bir kapatma butonu ekledim. Bu butona basınca bir pencere açılıp “gerçekten çıkmak istediğinize eminmisiniz?” desin. ve hemen altında “bunu birdaha gösterme” gibi bir seçenek var o seçeneği seçtikten sonra artık programı sıfırdan açsak bile bu olayı nasıl gerçekleştirebiliriz.
şimdiden teşekkürler

Merhaba, tkinter ile ilgili işlemleri bildiğinizi varsayıyorum.

Ben olsaydım, kullanıcının bir daha gösterme butonuna basıp basmadığını json dosyalarında veya config dosyalarında felan tutardım. Fi tarihinde bunlarla ilgili iki tane yazı yazmıştım. Şuraya bırakıyorum.

https://cihataltiparmak.github.io/tr/blog/2020-08-16-configparser-modulu-ve-kullanimi/

https://cihataltiparmak.github.io/tr/blog/2020-08-16-json-modulu-ve-kullanimi/

merhaba, yersiz ama github.io’da dinamik siteler tutabiliyoz mu? yani django,flask, asp.net vs. kodlarla mı çalıştırıyoruz

Yok çalıştıramıyorsun.

1 Beğeni

hocam şunu bir tane checkbox butonu oluşturarak gösterir misiniz sizden rica etsem. Gözünüzün önüne getirtmeye çalışayım hemen. Ana sayfada bir tane “X” kapatma butonu var. buraya kadar herşey normal. bu “X” butonuna basınca pencere açılmasını falan bliyorum hiç sorun yok. “X” butonuna bastık ve küçük bi ekran çıktı ve bize şöyle söylüyor: Çıkmak istediğinizden emin misiniz?. Ve bu cümlenin altında “evet” ve “hayır” butonu yer alıyor. birde sol altta küçük bir “checkbox” bu checkbox ta da “bunu bir daha gösterme” yazıyor. Bu checkbox’ı tikleyip "evet"e basıyoruz. ve işlem bitiyor. Birdaha “X” tuşuna bastığımızda herhangi bir pencere gelmeden anasayfa kapanıyor. Bunu bana gösterebilirmisiniz

Abiler daha iyi bilirde şöyle birşey geldi aklıma json dosyası değilde basit bir txt dosyası ile tut.
Program açılışında oluştur. CH=False ver. Tiklanirsa True ye çevir. Buton bastığında ilk bunu sorgulasin. İster Fonsiyorunyu dışarıdan yaz Return çevir. İster Fonksiyonun içine İf Else komutuyla gir.

He program On_Close fonksiyonu oluştur.Kapatirken mutlaka bu dosyayı da silmeyi unutma.

from tkinter import *
from tkinter import messagebox
import os
from win10toast import *

def window():
 def evet():
            ch = False
            with open("checksetting.txt","a") as f:
                if check_var.get() == True:
                    f.write(ch)
                    f.write(checkButton.select())
                else:
                    pass
        def hayir():
            kapa_["state"] ="normal"
            pop_up.destroy()
        check_var = BooleanVar()
        checkButton = Checkbutton(pop_up,text="Bunu bir daha gösterme",command=evet,variable=check_var,onvalue=True,offvalue=False)
        checkButton.place(x=40,y=50)
        Button(pop_up,text="Evet",command=evet,bd=0.5).place(x=150,y=70)
        Button(pop_up,text="Hayır",command=hayir,bd=0.5).place(x=200,y=70)

    kappa = PhotoImage(file="Icons\\kapa.png")
    kapa_= Button(window1,image=kappa,command=kapat,bg='#008080',activebackground='#008080',bd=0,cursor="hand2")
    kapa_.image = kappa
    kapa_.pack(anchor=NE)

şu kısımda işte bahsettiğim durum. burda sanırım birkaç oynamayla dediğiniz yapılabilir fakat ne kadar yapmaya çalışsam kafam bi yerde çok karışıyor üzerinde oynayarak gösterirmisiniz?

Arkadaşlar yapamıyormuyuz böyle birşey ?

Aşağıdaki kodu bir inceleyin isterseniz.

import os
import tkinter as tk

from configparser import ConfigParser


# Kullanıcıların yapacağı seçime göre düzenlenecek ön-tanımlı değişkenler
# bu fonksiyonda tanımlanır.
def load_defaults(message=None):
    # ConfigParser sınıfından bir örnek oluşturulur.
    config = ConfigParser()
    # Aşağıdaki gibi bir config dosyasının mevcut 
    # olup olmadığı kontrol edilir.
    if not os.path.exists("config.ini"):
        # Eğer dosya mevcut değilse, message değişkeninin değeri "true"
        # olarak ayarlanır.
        message = "true"
    else:
        # Eğer dosya mevcut ise ve message değişkeninin değeri None ise;
        if message is None:
            # config.ini dosyası okunur
            config.read("config.ini")
            # ve message değişkeninin değeri message anahtarının değeri
            # haline getirilir.
            message = config["ON CLOSE"]["message"]
    # Yeni bir config.ini dosyası oluşturulur
    with open("config.ini", "w") as f:
        # ON CLOSE isimli bir bölüm tanımlarız. Bu bölümün message isimli
        # bir anahtarı olur ve değerini message değişkeninin değeri
        # haline getiririz.
        config["ON CLOSE"] = {"message": message}
        # config dosyamızı yazarız.
        config.write(f)
        

# Ön-tanımlı message anahtarının değeri bu fonksiyon ile değiştirilir.        
def change_defaults(var):
    # Eğer var değişkeni bir değer döndürüyorsa;
    if var.get():
        # message anahtarının değeri false yapılır.
        load_defaults(message="false")
        

# Kapat düğmesine tıklandığında bu fonksiyon çağrılır.       
def open_toplevel(root):
    # ConfigParser sınıfından bir örnek oluşturulur.
    config = ConfigParser()
    # config.ini dosyası okunur.
    config.read("config.ini")
    # Eğer message anahtarının değeri true ise;
    if config["ON CLOSE"]["message"] == "true":
        # toplevel açılır.
        toplevel = tk.Toplevel()
        # Bir adet label oluşturulur.
        label = tk.Label(
            master=toplevel, 
            text="Gerçekten çıkmak istediğinize emin misiniz?")
        label.pack()
        # Düğmeler için bir frame oluşturulur.
        frame = tk.Frame(master=toplevel)
        frame.pack()
        # Ok düğmesi tanımlyalım.
        ok = tk.Button(
            master=frame, 
            text="OK",
            command=root.destroy,
            width=10,
        )
        ok.pack(side="left")
        # Cancel düğmesi tanımlayalım.
        cancel = tk.Button(
            master=frame, 
            text="Cancel", 
            command=toplevel.destroy,
            width=10
        )
        cancel.pack(side="left")
        # Checkbutton için bir tane BooleanVar tanımlayalım.
        var = tk.BooleanVar()
        # Checkbutton'u tanımlayalım.
        checkbutton = tk.Checkbutton(
            master=toplevel, 
            variable=var, 
            text="Bu pencereyi bir daha gösterme.",
            command=lambda: change_defaults(var)
        )
        checkbutton.pack()
    # Eğer message anahtarının değeri false ise;
    else:
        # Ana pencere kapatılır.
        root.destroy()
    
               
def main():
    # Ana pencere
    root = tk.Tk()
    root.geometry("400x400")
    # Kapatma düğmesine tıklayınca ne yapılacağını ayarlayalım.
    root.protocol("WM_DELETE_WINDOW", lambda: open_toplevel(root))
    root.mainloop()
        

if __name__ == "__main__":
    # Ön-tanımlı ayarları yükle.     
    load_defaults()
    # Programı çalıştır.
    main()

4 Beğeni

Sizlere Nekadar teşekkür etsem azdır. Hızır gibi yetiştiniz. çok teşekkür ederim <3

Eline sağlık hocam, gözümüz şenlendi :star2:

1 Beğeni