Tkinter ile oluşturulan ikinci pencere üstüne resim ekleme

Merhaba iyi çalışmalar hepinize;
oluşturduğum ana pencere üzerine bir buton yerleştirdim bu butona tıklayınca pencere2 oluşturdum ve pencere2’ninde üstüne butonlar yerleştirdim ancak ikinci pencerenin üstüne herhangi bir resim yerleştiremiyorum bu sorun ilk penceremde yaşamıyorum bunun nedeni nedir nasıl ekleyebilirim bu arada herhangi bir hata da almıyorum sadece boş gri gözüküyor ve resim eklemiş olduğum butonlarım click işlemine izin vermiyor

Merhaba, yazdığınız kodları bizimle paylaşır mısınız? Daha sağlıklı bir çözüm yolu izlememize yardımcı olacaktır.

Kodlarınızı ```` arasına almayı unutmayın.


# ```` ile ```` arasına

Tabi ki kod epeyce uzun size sorduğum kısmı yanlızca paylaşmaya çalışıyorum umarım anlaşılırdır, epeyce acemiyim bu arada sorduğum şey root3’te down.png’yi görüntüleyememek

def settingss():
      def girisyapma():
            parola = parolagiris.get()
                    if (parola == sifre):
            root.destroy()
            root2.destroy()
            root3= tk.Tk()
            root3.geometry("400x600")
            root3.resizable(width=tk.FALSE, height=tk.FALSE)
            haberlesme_img(root3, file="down.png")
            haberlesme=tk.Button(root3, command=haberlesme_baslat, bg="green")
            haberlesme.pack()
     sifre = "12345"
     root2=tk.Tk()
     parola= tk.Label(root2,text="Servis Şifresi")
     parola.pack()
     parolagiris = tk.Entry(root2, width=8, show="*")
     parolagiris.pack()
     giris = tk.Button(root2, text="Giriş", command=girisyapma)
     giris.pack()
     girisdurumu = tk.Label(root2, text="")
     girisdurumu.pack()
     root2.mainloop()
root = tk.Tk()
pgen=170
pyuks=350
ekrangen = root.winfo_screenwidth()
ekranyuks = root.winfo_screenheight()
x = (ekrangen - pgen-10)
y = (ekranyuks - pyuks - 70)
root.geometry("%dx%d+%d+%d"%(pgen, pyuks, x, y))
root.resizable(width=tk.FALSE, height=tk.FALSE)

settings = ImageTk.PhotoImage(file="key.png")
settings_button = tk.Button(root, image= settings, bg="white", command=settingss, borderwidth=0.5)
settings_button.place(relx=0.85, rely=0.172)
1 Beğeni

root3 için mainloop var mı?

aa evet sorun buymuş çok teşekkür ediyorum nasıl gözümden kaçtı

Estağfurullah, dediğim gibi kodları görebilirsek okuyabilir ve yardımcı oluruz. Başarılar dilerim.

Peki neden herhangi bir almadım ve root3 oluştu

mainloop oluşturmak için değil döngü içerisinde sürdürülebilir hale gelip üzerinde kodlar çalışması için gerekiyor.

mainloop olmasa da pencere gelir. Ama pencere üzerinde işlem yapabilmeniz için mainloop döngüsüne girmesi lazım ki her an kendini güncelleyerek aktifliğini devam ettirsin. öbür türlü açıldığı an işlevi sonlanıyor.

2 Beğeni

root3 oluştu ama mainloop olmadığı için anında sonlandı.

1 Beğeni

Merhaba,
Aynı sorunu ben de yaşıyorum.

Deneme için Aynı resmi hem ana pencerede hem de ikinci pencerede görüntülemek istiyorum ama ana pencerede görünmesine rağmen ikinci pencerede görünmüyor.

Yukarıdaki mesajda yazdığı gibi mainloop() eklememe rağmen hata veriyor.

from tkinter import Tk, ttk, Label, PhotoImage

pencere= Tk()
pencere.title("Tkinter ile Resim Ekle")
pencere.geometry("500x700")

Label(pencere, text= "Tkinter ile Pencereye Resim Ekleyelim", font=('Helvetica 15 bold')).pack(pady=20)

def pencereyi_goster():
	resim_penceresi= Tk()
	resim_penceresi.geometry("700x700")
	resim_penceresi.title(".:: Resim Penceresi ::.")

	etiket_resim_metni = Label(resim_penceresi, text="GÖRSEL YARDIM RESMİ AŞAĞIDA GÖRÜNMELİ").pack(pady=20)
	resim = PhotoImage(file="parametre.png")
	etiket_resim = Label(resim_penceresi, image=resim).pack()
	resim_penceresi.mainloop()

buton= ttk.Button(pencere, text="Yardım" ,command=pencereyi_goster)
buton.pack(pady=20)

resim = PhotoImage(file="parametre.png")
etiket_resim = Label(pencere, image=resim).pack(pady=20)

pencere.mainloop()

Hata mesajı:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.12/tkinter/__init__.py", line 1967, in __call__
    return self.func(*args)
           ^^^^^^^^^^^^^^^^
  File "/home/halil/Documents/GitHub/dnm.py", line 16, in pencereyi_goster
    etiket_resim = Label(resim_penceresi, image=resim).pack()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/tkinter/__init__.py", line 3237, in __init__
    Widget.__init__(self, master, 'label', cnf, kw)
  File "/usr/lib/python3.12/tkinter/__init__.py", line 2648, in __init__
    self.tk.call(
_tkinter.TclError: image "pyimage2" doesn't exist

Farklı sitelerden kod araştırması yapıp denesem de değişen tek şey hatadaki sayı oluyor Yani;

_tkinter.TclError: image "pyimage1" doesn't exist
_tkinter.TclError: image "pyimage2" doesn't exist
_tkinter.TclError: image "pyimage5" doesn't exist

Ana Pencere:

İkinci pencere:

var olan bir pencerede başka bir pencere oluşturmak istiyorsak Tk() yerine Toplevel() widgeti çok daha efektif olacaktır. tk() uygulamanın tamamını kapsar fakat toplevel sadece o uygulamada pencereyi temsil eder. Var olan pencerede bir daha tk kullanmak başka bir deyişle uygulama içerisine uygulama açmak gibi oluyor. Fakat toplevel widgetini kullanırsanız o uygulamaya bağlı pencere açmış olursunuz.
Sorun fonksiyon içerisinde oluşturulan pencerede. Toplevel sınıfını dahil ederek sorunlu yeri değiştirdiğimizde sorun çözülüyor.
kod betiği:

from tkinter import Tk, ttk, Label, PhotoImage, Toplevel

pencere= Tk()
pencere.title("Tkinter ile Resim Ekle")
pencere.geometry("500x700")

Label(pencere, text= "Tkinter ile Pencereye Resim Ekleyelim", font=('Helvetica 15 bold')).pack(pady=20)

def pencereyi_goster():
	resim_penceresi= Toplevel()
	resim_penceresi.geometry("700x700")
	resim_penceresi.title(".:: Resim Penceresi ::.")

	etiket_resim_metni = Label(resim_penceresi, text="GÖRSEL YARDIM RESMİ AŞAĞIDA GÖRÜNMELİ").pack(pady=20)
	resim = PhotoImage(file="parametre.png")
	etiket_resim = Label(resim_penceresi, image=resim).pack()
	resim_penceresi.mainloop()

buton= ttk.Button(pencere, text="Yardım" ,command=pencereyi_goster)
buton.pack(pady=20)

resim = PhotoImage(file="parametre.png")
etiket_resim = Label(pencere, image=resim).pack(pady=20)

pencere.mainloop()
2 Beğeni

Teşekkür ederim. Kodu Söylediğiniz şekilde düzeltince düzgün çalıştı.

1 Beğeni