
Tkinter normalde yandaki gibi bir renkli liste sunmuyor.
Bu sorunu küçük bir modül ile halletmeye çalıştım.
Kullanımı oldukça basit.
Sadece Listbox yerine ColoredListbox kullanmalısınız.
Örnek:
| deneme.py |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
from Tkinter import * import clbox root= Tk() def ekle(): a = 0 while a<20: a += 1 liste.insert(END, "a%s"%a) def sil(): liste.delete(ACTIVE) liste = clbox.ColoredListbox(bg1="white", bg2="blue") liste.pack() dugme = Button(text="Ekle", command=ekle) dugme.pack(side=LEFT) dugme2 = Button(text="Sil", command=sil) dugme2.pack(side=LEFT) mainloop()
|
ColoredListbox'a, normalde Listbox'a verdiğiniz tüm parametreleri verebilirsiniz
fakat bunun haricinde bg1 ve bg2 parametrelerini belirtmek zorundasınız.
Ben gerek görmedim ama clbox.py içinde ufak bir koşullamayla
bu zorunluluğu da ortadan kaldırabilirsiniz.
Modülün tek dezavantajı döngü üzerinden çalışması.
Her saniye liste üzerinde bir değişiklik olmuş mu, olmamış mı diye
kontrol ediyor, eğer bir değişiklik yaşanmışsa tekrar renklendirme yapıyor.
Bu da haliyle uygulamanızın <birazcık> yavaşlamasına neden oluyor.
(Teorik olarak yavaşlaması lazım ama ben böyle bir yavaşlama gözlemlemedim)
Eğer yavaşlama olmadan clbox kullanmak isterseniz clbox.py içinden
self.apply_it = self.after(1000, func=self.listcolors)
satırını silip, listeye her ekleme çıkarma yapacağınızda uygulama kodlarınıza
satırını eklemelisiniz.
Umarım faydası dokunur.
Konu hakkında her türlü soru ve öneriye açığım.
