Python Forum
[Tkinter] update the content of Text widget
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tkinter] update the content of Text widget
#1
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
Reply
#2
Quote:the update of the content of the Text was actually done but only once time and not in a continuous and multiple times
Your 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) 
Reply
#3
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 ()

 
Reply
#4
up
need help to resolve this problem
thanks
Reply
#5
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
Reply
#6
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.
Reply
#7
I remove lines 44 to 50 but the problem of the update is not solved
Reply
#8
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
Reply
#9
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?
Reply
#10
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)
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  [Tkinter] The Text in the Label widget Tkinter cuts off the Long text in the view malmustafa 4 4,931 Jun-26-2022, 06:26 PM
Last Post: menator01
  How to instantly update the plot by getting values from a Scale widget? OLE 20 6,331 May-18-2022, 02:35 AM
Last Post: OLE
  [Tkinter] Make my button text update? Skata100 1 2,043 Aug-07-2021, 05:37 AM
Last Post: deanhystad
  [Tkinter] Text widget inert mode on and off rfresh737 5 3,890 Apr-19-2021, 02:18 PM
Last Post: joe_momma
  update text variable on label with keypress knoxvilles_joker 3 4,939 Apr-17-2021, 11:21 PM
Last Post: knoxvilles_joker
  Line numbers in Text widget rfresh737 3 5,431 Apr-15-2021, 12:30 PM
Last Post: rfresh737
  tkinter text widget word wrap position chrisdb 6 7,592 Mar-18-2021, 03:55 PM
Last Post: chrisdb
  [Tkinter] Get the last entry in my text widget Pedroski55 3 6,423 Jul-13-2020, 10:34 PM
Last Post: Pedroski55
  How to place global tk text widget in class or on canvas puje 1 2,339 Jul-04-2020, 09:25 AM
Last Post: deanhystad
  [Tkinter] how to update label text from list Roshan 8 5,472 Apr-25-2020, 08:04 AM
Last Post: Roshan

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020