Python Toplevel

DEF içerisinden oluşturduğum Toplevel ile ilgili def dışarısında label ve buton oluşturmak istiyorum.
Fİkri olan var mı

O iş olmaz. Çünkü fonksiyon niteliğine dışarıdan erişimezsiniz. Ya sınıf tabanlı bir yapı kullanın ya da toplevel widgetını dışarda oluşturup içerde mainloop fonksiyonunu çalıştırın.

Söylediğiniz doğrultuda çalışma yaptım yalnız
Pencere2=Toplevel() şeklnde yazıp

fonksiyon içinde pencere2.mainloop()
yapmaa rağmen run yaptığımda aynı anda 2 pencere açılıyor

IDLE kullanarak mı yapıyorsunuz?

Düzenleme: “K”, "L"ye dönüştürüldü.

evet pycarhm kullanıyorum

O zaman bir bilgim yok. Çünkü IDLE kendi mainloop fonksiyonunu kullanarak direkt çalıştırıyor. Ancak normal python programı çalıştırır gibi yani çift tıklayarak çalıştırmayı deneyin.

Kimi modülleri çaıştıramıyorum.
import ImageTk gibi
böyle bir modül yok diye uyarı alıyorum

Kodlarınızın ilgili kısmını paylaşır mısınız?

O modül üçüncü taraf bir modül diye biliyorum; ayrıyeten kurmanız gerek.

Olay şu şekilde bir fonskiyon yazıyourm ve bunun içinde ayrı bir pencere açıyorum ama ben fonskiyonun dışarısında etiketleme ya da buton yazmak istiyorum

Eğer fonksiyon, bir sınıf içinde değilse doğrudan yazabilirsiniz. Eğer sınıf içinde ise başka bir fonksiyon oluşturup onun içinde yazabilirsiniz.

Şöyle yapabilirsiniz: Fonksiyonun dışında toplevel için bir tane değişken oluşturun değeri None olabilir.

toplevel = None

Daha sonra da fonksiyonun içinde bu değişken ismini kullanarak topleveli tekrar tanımlayın.

def fonksiyon():
    global toplevel
    toplevel = tk.Toplevel()

Artık herhangi bir fonksiyonun içinde veya global alanda değeri tk.Toplevel() olan toplevel değişkenine erişebilirsiniz. Ancak şunu unutmayın, toplevel değişkeni ile işlem yapmadan önce, değerinin None'dan tk.Toplevel()'e dönüşmüş olduğundan emin olmalısınız.

söylediğinizi yaptım
fakat fonskiyon dışıında toplevel penceresi üzerine buton ekleyemiyorum…eklediğim butonları ana pencerede açıyor(pencere ismini de belirtiyorum…buton=Button(toplevel,text=‘Bas’…gibi mesela)

Kodlarınızı buraya aktarmanızı rica etsem?

Başka bir proje için sildim önceki yaptıklarımı siz durumla ilgili çalışan
birkaç satırlık basit bir kod yazar mısınız

Umarım sorunuzu yanlış anlamamışımdır. Aşağıdaki kodları bir inceleyin, eğer sorunuzla alakalı değilse, konuyu tekrar daha ayrıntılı bir şekilde incelemeye çalışırım. Ben sorunu anladığım şekilde bir çözüm önerisi sundum. Bakalım doğru anlamış mıyım. :slight_smile:

#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-

import tkinter as tk

root = tk.Tk()

button1 = tk.Button(master=root, text="Toplevel oluştur")
button1.pack()

toplevel = None


def toplevel_kapat():
	global toplevel
	toplevel.destroy()


def toplevel_olustur():
	global toplevel
	toplevel = tk.Toplevel()
	button2 = tk.Button(master=toplevel, text="Toplevel kapat.", command=toplevel_kapat)
	button2.pack()


button1.configure(command=toplevel_olustur)

root.mainloop()

benim istediğim buton2’yi def’in dışarsında oluşturmak…Siz burada def’in içinde tanımlamışsınız.Benim onunla ilgili sıkıntım yok ,istediğim şey Def dışında oluşturabilmek

Özellikle o şekilde yapmak istemenizin bir sebebi var mı ya da şöyle sorayım neden buna ihtiyaç duyduğunuzu paylaşabilir misiniz? Çünkü button’u dışarı aldığınızda master parametresi toplevel=None olarak ayarlanır ve doğal olarak master=None olur. Bu parametre None olursa tk penceresinin üzerinde bir button oluşturulur.

birçok pencere sayfası oluşturmak isteidğimde sıkıntı olacağını düşünüyourm.Mesela birpencere açıkdı onun için ayrı bir def,daah sonra onun altında başka bir pencere bu sefer onun için de bir def açıcam…O sebepten epey bir karmaşa ve sağa doğru kayma ouoyor…bunu engellemek istiyorum ben

Bu noktada sınıf kullanmayı düşünmeye başlamanızı tavsiye ederim.

1 Beğeni