Dinamik programlama dilinin Python avantajlarından birisi, çalışma zamanında dinamik olarak bir grafik kullanıcı arabirimi (GUI) oluşturabilme özelliğidir.
Dahili kütüphane Tkinter, kontrol, giriş ve çıkış bilgileri için widget'lar için çeşitli grafik öğeleri oluşturmanıza, yerleştirmenize ve taşımanıza izin verir.
Bununla birlikte, Tkinter kütüphanesinin bir özelliği vardır; eğer pencere sayısı, monitör ekranınız için mümkün olan maksimum boyuta sahip pencere görüntülemeye izin verilenden daha büyük olursa, pencerenin gizli alanına erişirken bir sorun oluşur.
Tix (Tk Interface Extension) kütüphanesi olan Tkinter'in yerleşik kütüphanesinin uzantısı, kaydırmalı çubuklu bir pencere olan ScrolledWindow aracıyla bu sorunu çözebilir.
Tix kitaplığı ile birlikte gelen ikinci yararlı widget sekmeli penceredir - NoteBook.
Bununla birlikte, Python'daki pencereli uygulamalarda bu aletlerin kullanımı, dahili aletlerin atanmış pencere boyutuna uymaması durumunda bilgi görüntüleme özelliğine sahiptir.
Bu makalede, dinamik bir GUI oluştururken bu özelliklere bakacağız:
İlk örnek, ScrolledWindow widget'ı ana uygulama penceresine yerleştirmektir ve böylece tüm diğer widget'lar otomatik olarak buraya yerleşecektir.
İkinci örnek, ScrolledWindow aletlerini yalnızca Not Defteri aletinin sekmelerine yerleştirmektir.
Burada sunulan örnekler Python 2.7 ve Linux işletim sisteminde uygulanmaktadır: Ubuntu 16.04LTS.
Umarım bu örnekleri Python ve işletim sisteminizde uygulamanız sizin için herhangi bir karmaşıklık sunmaz.
Örnek No.1 - ScrolledWindow widget'ı tüm uygulamanın ana konteyneri olarak.
#!/usr/bin/python
import Tix as tx
root=tx.Tk()
root.geometry("800x600+0+10")
swr=tx.ScrolledWindow(root)
swr.pack(fill=tx.BOTH, expand=1)
nb=tx.NoteBook(swr.window)
nb.pack(fill=tx.BOTH, expand=1)
for i in range(1,21):
nb.add("tab"+str(i),label="Tab "+str(i))
for k in range(1,39):
l=tx.Label(nb.tab1,text="label "+str(k))
l.pack()
for k in range(1,29):
l=tx.Label(nb.tab2,text="label "+str(k))
l.pack(side=tx.LEFT)
root.mainloop()
Senaryo No.1'in sonucu, aşağıdaki üç rakamda görülebilir:
Şekil 1
Lansman sonrasında No.1 uygulamasının ilk görünümü.
Ana pencerenin sağından ve altına kaydırma çubuklarının görünür otomatik oluşumudur.
Not defteri parçacığı tarafından işgal edilen toplam boyut, ilk çevrimde belirtilen Sekmelerin sayısı ve sonraki iki döngüde belirtilen Etiketlerin sayısı nedeniyle orijinal kök penceresinden (800x600) daha büyüktür.
Bu şekil belirtilen 20 sekmenin, ana pencereye yalnızca 15 yerleştirildiğini ve ilk sekmede belirtilen 39 etiketten sadece 31'inin bulunduğunu göstermektedir.
Şekil 2
İlk durumda ikinci sekme 28'den yalnızca 16 etiket gösteriyor.
Kaydırma çubuklarının konumu değişmeden kalır.
Şekil 3
Alt kaydırma çubuğunu sağa hareket ettirdiğinizde, ana pencerenin NoteBook widget'inin tüm sekmelerini değil, aynı zamanda ikinci sekmede yer alan tüm etiketleri de kapsadığını görebilirsiniz.
Örnek No.2 - ScrolledWindow widgeti NoteBook widget'inin her sekmesinin içinde bulunur.
#!/usr/bin/python
import Tix as tx
root=tx.Tk()
root.geometry("800x600+0+10")
swm = []
nb=tx.NoteBook(root)
nb.pack(fill=tx.BOTH, expand=1)
for i in range(1,21):
nb.add("tab"+str(i),label="Tab "+str(i))
sw=tx.ScrolledWindow(eval("nb.tab"+str(i)))
swm.append(sw)
sw.pack(fill=tx.BOTH, expand=1)
for k in range(1,39):
l=tx.Label(swm[0].window,text="label "+str(k))
l.pack()
for k in range(1,29):
l=tx.Label(swm[1].window,text="label "+str(k))
l.pack(side=tx.LEFT)
root.mainloop()
Senaryonun 2 nolu sonucu aşağıdaki üç şekilden görülebilir:
Şekil 4
Başlatma sonrası No.2 başvurunun ilk görünümü.
Kaydırma çubuğu, yalnızca Tab1 sekmesinde sağda göründü, çünkü dikey işaretlerin sayısı ana pencerenin orijinal boyutlarından daha büyük.
Şekil 5
İkinci sekme yalnızca alt kaydırma çubuğunu gösterir, çünkü bu sekmede etiketler yatay olarak konumlandırılmıştır.
Şekil 6
Kaydırma çubuğunu sağa kaydırdığınızda, tüm etiketleri pencerenin sonuna kadar görebilirsiniz, ancak 15'den büyük sayıdaki sekmelere erişemezsiniz.
Dolayısıyla, 2 numaralı varyantta, kaydırma çubukları yalnızca sekmede erişim sağlar.
Sekme sayısı, ana pencerenin yatay boyutuna yerleştirilenden daha büyükse, onlara erişemezsiniz.
Bu nedenle, NoteBook aletinin sekmelerin sayısı ana pencerenin görüntüleme sınırlarını aşacak kadar fazla değilse, ScrolledWindow aletinin konumunun dikkate alınan değişkeni oldukça kabul edilebilirdir.
Her iki değişkeni birleştirmeye çalışmak, Örnek No.1 ile aynı sonucu vermiştir çünkü ScrolledWindow'un pencere öğesi penceresi içine yerleştirilen nesnelerin kapladığı maksimum boyutlara genişler.
Umarım bu örnekler pencere uygulamalarınızı Python'da tasarlamanıza yardımcı olacaktır.