Python Forum

Full Version: update the content of Text widget
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2
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
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) 
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 ()

 
up
need help to resolve this problem
thanks
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
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.
I remove lines 44 to 50 but the problem of the update is not solved
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
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?
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)
Pages: 1 2