[Tkinter] update the content of Text widget - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: GUI (https://python-forum.io/forum-10.html) +--- Thread: [Tkinter] update the content of Text widget (/thread-14204.html) Pages:
1
2
|
update the content of Text widget - atlass218 - Nov-19-2018 hi I try to update the content of Text widget by using this fonction: def affichage_ddm_axe_loc35R_update (): with open('archives/ILS_35R/loc35R/releves_mesure_loc35R/ddm_axe_loc35R/ddm_axe_monitor1_loc35R.txt') as ddm_axe_monitor1, open('archives/ILS_35R/loc35R/releves_mesure_loc35R/ddm_axe_loc35R/ddm_axe_monitor2_loc35R.txt') as ddm_axe_monitor2: s_generalites_bottom_axe_loc35R= Scrollbar(generalites_bottom) T_generalites_bottom_axe_loc35R= Text(generalites_bottom,bg='powder blue',width=450,height=350,font=('arial',14,'bold')) s_generalites_bottom_axe_loc35R.pack(side=RIGHT, fill=Y) T_generalites_bottom_axe_loc35R.pack(side=LEFT, fill=Y) s_generalites_bottom_axe_loc35R.config(command=T_generalites_bottom_axe_loc35R.yview) T_generalites_bottom_axe_loc35R.config(yscrollcommand=s_generalites_bottom_axe_loc35R.set) while True: line1 = ddm_axe_monitor1.readline() if len(line1) == 0: break line1 = line1.strip().split() line2 = ddm_axe_monitor2.readline() line2 = line2.strip().split() T_generalites_bottom_axe_loc35R.insert(END, f'{line1[0]:15}\t {line1[1]:10}\t\t {line2[1]:10}\n') T_generalites_bottom_axe_loc35R.after(1000, update)the above python code is inspired from the following code : def update(): with open("htfl.txt","r") as f: data = f.read() T.insert(END,data) T.after(1000, update)the update of the content of the Text was actually done but only once time and not in a continuous and multiple times can you help me please RE: update the content of Text widget - woooee - Nov-19-2018 Quote:the update of the content of the Text was actually done but only once time and not in a continuous and multiple timesYour after() calls a function named update (and it is only called once). Please post your update() function T_generalites_bottom_axe_loc35R.after(1000, update) RE: update the content of Text widget - atlass218 - Nov-20-2018 sorry I rectfie the function code def affichage_ddm_axe_loc35R_update (): with open('archives/ILS_35R/loc35R/releves_mesure_loc35R/ddm_axe_loc35R/ddm_axe_monitor1_loc35R.txt') as ddm_axe_monitor1, open('archives/ILS_35R/loc35R/releves_mesure_loc35R/ddm_axe_loc35R/ddm_axe_monitor2_loc35R.txt') as ddm_axe_monitor2: s_generalites_bottom_axe_loc35R= Scrollbar(generalites_bottom) T_generalites_bottom_axe_loc35R= Text(generalites_bottom,bg='powder blue',width=450,height=350,font=('arial',14,'bold')) s_generalites_bottom_axe_loc35R.pack(side=RIGHT, fill=Y) T_generalites_bottom_axe_loc35R.pack(side=LEFT, fill=Y) s_generalites_bottom_axe_loc35R.config(command=T_generalites_bottom_axe_loc35R.yview) T_generalites_bottom_axe_loc35R.config(yscrollcommand=s_generalites_bottom_axe_loc35R.set) while True: line1 = ddm_axe_monitor1.readline() if len(line1) == 0: break line1 = line1.strip().split() line2 = ddm_axe_monitor2.readline() line2 = line2.strip().split() T_generalites_bottom_axe_loc35R.insert(END, f'{line1[0]:15}\t {line1[1]:10}\t\t {line2[1]:10}\n') T_generalites_bottom_axe_loc35R.after(1000, affichage_ddm_axe_loc35R_update)and there is the code to call function and update mode : affichage_ddm_axe_loc35R_update () RE: update the content of Text widget - atlass218 - Nov-23-2018 up need help to resolve this problem thanks RE: update the content of Text widget - atlass218 - Nov-26-2018 there is the detailed code : from tkinter import * from tkinter.ttk import Notebook import tkinter.ttk as ttk import time #window root=Tk() root.geometry('450x350') root.title('test') #variables ent_releves1=StringVar() ent_releves2=StringVar() #Functions: def archiver(): archive_monitoring={"date" : time.strftime('%d/%m/%y', time.localtime()), "releves_mesure1": ent_releves1.get(), "releves_mesure2": ent_releves2.get(), } if (ent_releves1.get() !="" ) : mon_fichier1 = open("save/monitor1.txt", "r") text1 = mon_fichier1.read() mon_fichier1.close() textInsert1=str(archive_monitoring["date"])+"\t" +str(archive_monitoring["releves_mesure1"])+"\n" fileW1 = open("save/monitor1.txt", "w") fileW1.write(textInsert1 + text1) fileW1.close() if (ent_releves2.get() !="" ) : mon_fichier2 = open("save/monitor2.txt", "r") text2 = mon_fichier2.read() mon_fichier2.close() textInsert2=str(archive_monitoring["date"])+"\t" +str(archive_monitoring["releves_mesure2"])+"\n" fileW2 = open("save/monitor2.txt", "w") fileW2.write(textInsert2 + text2) fileW2.close() def affichage_update (): with open('save/monitor1.txt',"r") as monitor1, open('save/monitor2.txt',"r") as monitor2: s= Scrollbar(releves) T= Text(releves,bg='powder blue',width=450,height=350,font=('arial',14,'bold'),pady=25) s.pack(side=RIGHT, fill=Y) T.pack(side=LEFT, fill=Y) s.config(command=T.yview) T.config(yscrollcommand=s.set) while True: line1 = monitor1.readline() if len(line1) == 0: break line1 = line1.strip().split() line2 = monitor2.readline() line2 = line2.strip().split() T.insert(END, f'{line1[0]:15}\t {line1[1]:10}\t\t {line2[1]:10}\n') T.update_idletasks() T.after(500,affichage_update) container=ttk.Notebook(root,width=450,height=350) monitoring=Frame(container,bg='powder blue') container.add(monitoring,text='monitor data') releves=Frame(container,bg='powder blue') container.add(releves,text='releves') lbf1 = LabelFrame(monitoring, text="Lecture Monitor 1",padx=10, pady=10) lbf1.pack(side=LEFT,padx=10, pady=10,anchor=NE) entry_lbf1= Entry(lbf1,textvariable=ent_releves1) entry_lbf1.pack(pady=5) lbf2 = LabelFrame(monitoring, text="Lecture Monitor 2",padx=10, pady=10) lbf2.pack(side=LEFT,padx=10, pady=10,anchor=NW) entry_lbf2= Entry(lbf2,textvariable=ent_releves2) entry_lbf2.pack(pady=5) bt_archiver=Button(monitoring,text='Archiver',command=archiver) bt_archiver.place(x=40,y=120) generalites_top=Frame(releves,bg='powder blue',width=450) generalites_top.pack(side=TOP,fill=X) generalites_bottom=Frame(releves,bg='powder blue') generalites_bottom.pack(side=BOTTOM) head_axe_loc35L = ['Date', 'Monitor 1', 'Monitor 2'] lb_date=Label(generalites_top,text=f'{head_axe_loc35L[0]:15}',bg='powder blue',font=('arial',12,'bold')) lb_date.pack(side=LEFT,padx=5,anchor=NW) lb_monitor1=Label(generalites_top,text=f'{head_axe_loc35L[1]:10}',bg='powder blue',font=('arial',12,'bold')) lb_monitor1.pack( side=LEFT) lb_monitor2=Label(generalites_top,text=f'{head_axe_loc35L[2]:10}',bg='powder blue',font=('arial',12,'bold')) lb_monitor2.pack(padx=70, side=LEFT) with open('save/monitor1.txt',"r") as monitor1, open('save/monitor2.txt',"r") as monitor2: s= Scrollbar(releves) T= Text(releves,bg='powder blue',width=450,height=350,font=('arial',14,'bold'),pady=25) s.pack(side=RIGHT, fill=Y) T.pack(side=LEFT, fill=Y) s.config(command=T.yview) T.config(yscrollcommand=s.set) while True: line1 = monitor1.readline() if len(line1) == 0: break line1 = line1.strip().split() line2 = monitor2.readline() line2 = line2.strip().split() T.insert(END, f'{line1[0]:15}\t {line1[1]:10}\t\t {line2[1]:10}\n') T.update_idletasks() T.after(500,affichage_update) container.pack(expand=1, fill='both', padx=5, pady=5) root.mainloop()thanks for help RE: update the content of Text widget - jfong - Nov-27-2018 It's not a good idea repeatedly create widget s and T in the affichage_update(). I don't know what it will cause but remove them (line 44~50) out can solve the update problem. RE: update the content of Text widget - atlass218 - Nov-27-2018 I remove lines 44 to 50 but the problem of the update is not solved RE: update the content of Text widget - jfong - Nov-27-2018 This one works for me on Windows Vista, Python 3.4 from tkinter import * from tkinter.ttk import Notebook import tkinter.ttk as ttk import time #window root=Tk() root.geometry('450x350') root.title('test') #variables ent_releves1=StringVar() ent_releves2=StringVar() file1 = 'temp1.txt' file2 = 'temp2.txt' #Functions: def archiver(): archive_monitoring={"date" : time.strftime('%d/%m/%y', time.localtime()), "releves_mesure1": ent_releves1.get(), "releves_mesure2": ent_releves2.get(), } if (ent_releves1.get() !="" ) : mon_fichier1 = open(file1, "r") text1 = mon_fichier1.read() mon_fichier1.close() textInsert1=str(archive_monitoring["date"])+"\t" +str(archive_monitoring["releves_mesure1"])+"\n" fileW1 = open(file1, "w") fileW1.write(textInsert1 + text1) fileW1.close() if (ent_releves2.get() !="" ) : mon_fichier2 = open(file2, "r") text2 = mon_fichier2.read() mon_fichier2.close() textInsert2=str(archive_monitoring["date"])+"\t" +str(archive_monitoring["releves_mesure2"])+"\n" fileW2 = open(file2, "w") fileW2.write(textInsert2 + text2) fileW2.close() container=ttk.Notebook(root,width=450,height=350) monitoring=Frame(container,bg='powder blue') container.add(monitoring,text='monitor data') releves=Frame(container,bg='powder blue') container.add(releves,text='releves') s= Scrollbar(releves) T= Text(releves,bg='powder blue',width=450,height=350,font=('arial',14,'bold'),pady=25) s.pack(side=RIGHT, fill=Y) T.pack(side=LEFT, fill=Y) s.config(command=T.yview) T.config(yscrollcommand=s.set) def affichage_update(): with open(file1,"r") as monitor1, open(file2,"r") as monitor2: T.delete('1.0', 'end') while True: line1 = monitor1.readline() if len(line1) == 0: break line1 = line1.strip().split() line2 = monitor2.readline() line2 = line2.strip().split() #T.insert(END, f'{line1[0]:15}\t {line1[1]:10}\t\t {line2[1]:10}\n') T.insert(END, '{:15}\t {:10}\t\t {:10}\n'.format(line1[0], line1[1], line2[1])) #T.update_idletasks() T.after(500,affichage_update) lbf1 = LabelFrame(monitoring, text="Lecture Monitor 1",padx=10, pady=10) lbf1.pack(side=LEFT,padx=10, pady=10,anchor=NE) entry_lbf1= Entry(lbf1,textvariable=ent_releves1) entry_lbf1.pack(pady=5) lbf2 = LabelFrame(monitoring, text="Lecture Monitor 2",padx=10, pady=10) lbf2.pack(side=LEFT,padx=10, pady=10,anchor=NW) entry_lbf2= Entry(lbf2,textvariable=ent_releves2) entry_lbf2.pack(pady=5) bt_archiver=Button(monitoring,text='Archiver',command=archiver) bt_archiver.place(x=40,y=120) generalites_top=Frame(releves,bg='powder blue',width=450) generalites_top.pack(side=TOP,fill=X) generalites_bottom=Frame(releves,bg='powder blue') generalites_bottom.pack(side=BOTTOM) head_axe_loc35L = ['Date', 'Monitor 1', 'Monitor 2'] #lb_date=Label(generalites_top,text=f'{head_axe_loc35L[0]:15}',bg='powder blue',font=('arial',12,'bold')) lb_date=Label(generalites_top,text='{:15}'.format(head_axe_loc35L[0]),bg='powder blue',font=('arial',12,'bold')) lb_date.pack(side=LEFT,padx=5,anchor=NW) #lb_monitor1=Label(generalites_top,text=f'{head_axe_loc35L[1]:10}',bg='powder blue',font=('arial',12,'bold')) lb_monitor1=Label(generalites_top,text='{:10}'.format(head_axe_loc35L[1]),bg='powder blue',font=('arial',12,'bold')) lb_monitor1.pack( side=LEFT) #lb_monitor2=Label(generalites_top,text=f'{head_axe_loc35L[2]:10}',bg='powder blue',font=('arial',12,'bold')) lb_monitor2=Label(generalites_top,text='{:10}'.format(head_axe_loc35L[2]), bg='powder blue',font=('arial',12,'bold')) lb_monitor2.pack(padx=70, side=LEFT) affichage_update() container.pack(expand=1, fill='both', padx=5, pady=5) root.mainloop()Replace file1 and file2 with your own RE: update the content of Text widget - atlass218 - Nov-27-2018 I test the code with my personnel files it's OK but the head is not shown at the top the code of the head is : head_axe_loc35L = ['Date', 'Monitor 1', 'Monitor 2'] lb_date=Label(generalites_top,text='{:15}'.format(head_axe_loc35L[0]),bg='powder blue',font=('arial',12,'bold')) lb_date.pack(side=LEFT,padx=5,anchor=NW) lb_monitor1=Label(generalites_top,text='{:10}'.format(head_axe_loc35L[1]),bg='powder blue',font=('arial',12,'bold')) lb_monitor1.pack( side=LEFT) lb_monitor2=Label(generalites_top,text='{:10}'.format(head_axe_loc35L[2]), bg='powder blue',font=('arial',12,'bold')) lb_monitor2.pack(padx=70, side=LEFT)I check some possibilities but it doesn't appear, I don't knew why? RE: update the content of Text widget - jfong - Nov-28-2018 The pack manager is a sequence-related procedure, which means first packed widget always located first. Also, during the debugging, use different background color may help on finding the problem. Because of the continuously update of the whole text region, the Scrollbar becomes useless. You may consider move it into archiver(). container=ttk.Notebook(root,width=450,height=350) monitoring=Frame(container,bg='yellow') container.add(monitoring,text='monitor data') releves=Frame(container,bg='blue') container.add(releves,text='releves') generalites_top=Frame(releves,bg='red') generalites_top.pack(side=TOP, fill=X) s= Scrollbar(releves) s.pack(side=RIGHT, fill=Y) T= Text(releves, bg='yellow', font=('arial',14,'bold'), pady=25) T.pack(side=LEFT, fill=BOTH) s.config(command=T.yview) T.config(yscrollcommand=s.set) |