Farklı renklere sahip yazı

Aynı soruyu istihza.com’da da sormuştum ama cevap alamamıştım. Bir Entry widgetının üzerine yazılan belli kelimeleri nasıl farklı renklere dönüştürebilirim?(idlelib paketinde kullanılan yöntemi çözemedim ama araştırmak isteyenler colorizer modülüne bakabilir?)

Merhaba,
Sorularınızla beraber ben de yeni şeyler öğreniyorum. Şu an sorduğunuz soruyu cevaplayacak bilgi seviyesinde değilim. Ufak çaplı bir araştırma sonucunda sorunuza uygun bir cevap da bulamadım. Daha doğrusu yapmak istediğiniz şeyi araştırırken karşıma farklı sonuçlar çıktı. Tıpkı sizin sorduğunuz gibi bir entry widgetinin belli kelimeleri nasıl farklı renklere dönüştürülür şeklinde İngilizce aramalar yaptığımda karşıma hep yapmak istediğinizin text widgetiyle nasıl yapılacağına dair sonuçlar çıktı.

Mesela text() widgetinin tag_add ve ve tag_configure fonksiyonlarıyla bir metnin içerisindeki belli yerlerin renklerini değiştirebiliyorsunuz ancak özel olarak seçilmiş bir kelime için nasıl bir fonksiyon kullanmak gerekiyor, bilgim olmadığı için yardımcı olamıyorum.

Tkinter ile yapılabilir ama hem çok karışık hem de çok zahmetli. Peki ya diğer gui paketleriyle yapılabilir mi?

Bilmiyorum ki, diğer GUI paketlerine henüz göz atma fırsatım olmadı. Hatırlıyorsan blackvkng bize Jython’u önermişti. Belki o Jython’da böyle bir işlemin yapılıp yapılamayacağını söyleyebilir.

Merhaba.

Entry aracında sanırım böyle bir özellik yok. Ancak Text aracını kullanarak yapabilirsiniz (Kodlar Python 3.6.0 ile yazılmıştır.):

from tkinter import *

ana_pencere = Tk()

yazı = Text(ana_pencere)
yazı.pack()

# Yazı aracına klavye girişi yapıldığında çalışacak fonksiyon
def giriş(olay):
    # "kırmızı" etiketli tüm metinleri temizle, çünkü silinmişler olabilir.
    yazı.tag_remove("kırmızı", "1.0", END)
    aranan = "kırmızı"
    dizinler = []
    # Tüm aranan sözcükleri bul.
    dizin1 = yazı.search(aranan, "1.0", END)
    while dizin1:
        # Eğer dizin1 "1.0" ise dizin2 "1.7" olacaktır, çünkü aranan sözcük "kırmızı" 7 harftir.
        dizin2 = dizin1.split('.')[0] + '.' + str(int(dizin1.split('.')[1]) + len(aranan))
        dizinler.append((dizin1, dizin2))
        dizin1 = yazı.search(aranan, dizin2, END)
    # Tüm eşleşen sözcüklere "kırmızı" etiketini ata, böylece renkleri kırmızı olsun.
    for dizin1, dizin2 in dizinler:
        yazı.tag_add("kırmızı", dizin1, dizin2)

# "kırmızı" etiketli metinlerin rengi(foreground) red(kırmızı) olsun.
yazı.tag_configure("kırmızı", foreground="red")
# Klavye tuşları basılıp bırakıldığında `giriş` fonksiyonu çalışsın.
yazı.bind("<KeyRelease>", giriş)

mainloop()

İyi çalışmalar.

3 Beğeni