Tkinter Pencerelerine Nasıl Scrollbar Ekleyebiliriz?

Text veya List gibi widgetlara scrollbar eklemeyi biliyorum. Ama aynı yöntemle pencereye eklemeye çalışınca tabi ki error veriyor çünkü desteklenmiyor. Nasıl yapmamı önerirsiniz?

Canvas widgetiyle yapabilirsiniz. Kaydırma çubuğunun etkin olacağı widgeti de (aşağıdaki örnekte çerçeve üzerinde etkin) Canvas widgetinin içine yerleştirirsiniz.

Sınıf Yöntemine göre:

import tkinter as tk
class Uygulama(tk.Canvas):
    def __init__(self, master=None):
        tk.Canvas.__init__(self, master)
        self.çerçeve = tk.Frame(master=self, height=800)
        self.çerçeve.pack()
        self.yscrollbar = tk.Scrollbar(master=None)
        self.yscrollbar.pack(side="right", fill="y")
        self.widgetleri_düzenle()
    def widgetleri_düzenle(self):
        self.yscrollbar.configure(orient="vertical", command=self.yview)
        self.configure(yscrollcommand=self.yscrollbar.set)
        self.pack()
        self.create_window((4, 4), window=self.çerçeve, anchor="nw")
        self.çerçeve.bind("<Configure>", self.çerçeve_üzerinde_yapılandırma)
    def çerçeve_üzerinde_yapılandırma(self, event):
        self.configure(scrollregion=self.bbox("all"))


if __name__ == "__main__":
    pencere = tk.Tk()
    örnek = Uygulama(master=pencere)
    örnek.mainloop()

Normalde tk.Frame widgetinden miras almak oldukça yaygın kullanılan bir yöntemdir. Yukarıdaki örnekte miras alınan sınıf ise Canvas widgetidir. İsterseniz örnekteki gibi de miras alabilirsiniz, ya da tk.Frame()'den miras alırsınız, Canvas’ı ana Frame’in içine yerleştirirsiniz sonra da başka bir frame oluşturup onu da Canvas’ın içine yerleştirirsiniz.

Prosedürel Yönteme Göre:

[code]
import tkinter as tk
def çerçeve_üzerinde_yapılandırma(event):
palet.configure(scrollregion=palet.bbox(“all”))

pencere = tk.Tk()

palet = tk.Canvas(master=pencere)

çerçeve = tk.Frame(master=palet, height=800)
çerçeve.pack()

scrollbar = tk.Scrollbar(master=pencere)
scrollbar.pack(side=“right”, fill=“y”)

scrollbar.configure(orient=“vertical”, command=palet.yview)
palet.configure(yscrollcommand=scrollbar.set)
palet.pack()
palet.create_window((4, 4), window=çerçeve, anchor=“nw”)
çerçeve.bind("", çerçeve_üzerinde_yapılandırma)

pencere.mainloop()[/code]

1 Beğeni

Birinciyi direkt es geçtim. Frame ve canvas in ne olduğunu öğrenince mantıklı geldi. Deneyeceğim. Teşekkürler…