banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GEODATA DAYS 2024

#1 Mon 26 November 2018 12:04

atlass218
Juste Inscrit !
Date d'inscription: 26 Nov 2018
Messages: 1

QGIS: actualisation automatique du contenu du widget tkinter 'Text'

bonjour;
je suis entrain de finaliser un petit projet. etj'ai rencontre un probleme d'actualisation du contenu du widget tkinter "Text" de mon application cree par python 3.6
le contenu du code est comme suit :

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}tt {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}tt {line2[1]:10}n')

T.update_idletasks()
            
T.after(500,affichage_update)    

container.pack(expand=1, fill='both', padx=5, pady=5)

root.mainloop()

merci d'avance pour l'aide

Hors ligne

 

#2 Wed 28 November 2018 12:33

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 726

Re: QGIS: actualisation automatique du contenu du widget tkinter 'Text'

Bonjour,

sans répondre à la question car le peu d'éléments fournis (à part le code) ne le permet pas,
pourquoi passer par tkinter alors que qgis est interfacé à pyqt, quelque chose m'échappe.

Cordialement,

Hors ligne

 

#3 Wed 28 November 2018 12:41

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

Re: QGIS: actualisation automatique du contenu du widget tkinter 'Text'

Bonjour,

Dans votre post, nous ne nous faîtes pas part de votre message d'erreur.
Aussi, sous QGIS, c'est (py)Qt qui est utilisé pour modéliser des interfaces.

On importe les modules pyQt comme ceci, sous QGIS 3 :

Code:

from PyQt5.QtCore import *
from PyQt5.QtGui import *

geodata au cerema et petits billets en géomatique

Hors ligne

 

Pied de page des forums

Powered by FluxBB