1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| from tkinter import *
from tkinter.scrolledtext import ScrolledText
class ScrolledText(Frame):
"""Widget composite, associant un widget Text et une barre de défilement"""
def __init__(self, boss, baseFont="Times", x=50, y=25):
Frame.__init__(self, boss, bd=2, relief=SUNKEN)
self.texte = Text(self, font=baseFont, bg="ivory", bd=1, width=x, height=y)
scroll = Scrollbar(bd=1, command=self.texte.yview)
self.texte.configure(yscrollcommand=scroll.set)
self.texte.pack(side=LEFT, expand=YES, fill=BOTH, padx=2, pady=2)
scroll.pack(side=RIGHT, expand=NO, fill=Y, padx=2, pady=2)
def importFichier(self, fichier="le_corbeau_et_le_renard.txt", encodage="utf8"):
"""insertion d un texte dans le widget, a partir d un fichier"""
of = open(fichier, "r", encoding=encodage)
lignes = of.readlines()
of.close()
for li in lignes:
self.texte.insert(END, li)
def chercheCible(event=None):
"""defilement du texte jusqu'a la balise cible ,grace a la methode see()"""
index = st.tag_nextrange('cible', '0.0', END)
st.see(index[0])
# programme principal
master = Tk()
lib = Label(master, text="widget composite : Text + Scrollbar", font="Times 14 bold italic", fg="navy")
lib.pack(padx=10, pady=4)
st = ScrolledText(master, font="Helvetica 12 normal", width=40, height=10)
st.pack(expand=YES, fill=BOTH, padx=8, pady=8)
# definition des balises
st.tag_config('titre', foreground="brown", font="Helvetica 11 bold italic")
st.tag_config('lien', foreground="blue", font="Helvetica 11 bold italic")
st.tag_config('cible', foreground="forest green", font="Time 11 bold")
st.tag_bind('lien', '<Button-3>', chercheCible)
titre = """ Le corbeau et le renard de Jean De La Fontaine auteur français\n"""
auteur = """ Jean de la Fontaine\n
écrivain francais (1621-1695)\n
célébre pour ses contes en vers\n
et surtout ses fables publiées\n
de 1668 a 1694"""
# import fichier
importFichier("le_corbeau_et_le_renard.txt", encodage="utf8")
st.insert("0.0", titre, "titre")
st.insert(END, auteur, "cible")
master.mainloop() |
Partager