簡體   English   中英

在文本小部件tkinter中顯示內容文件並進行更新

[英]display content file in Text widget tkinter with update

我嘗試在tkinter(python 3.6)中使Text widgte顯示文本文件的內容。我的問題是每隔01秒自動更新Text小部件。

#!/usr/bin/python3
# -*- coding: utf-8 -*-

from tkinter import *
import tkinter.ttk as ttk
from tkinter.ttk import Notebook
import time

root=Tk()
root.geometry('540x420')
root.title('Text update')

ILS=ttk.Notebook(root,width=520,height=450)

releves_loc35R = Frame(ILS,bg="powder blue")
ILS.add(releves_loc35R, text = 'releves')

data_loc35R = Frame(ILS,bg="powder blue")
ILS.add(data_loc35R, text = 'data')

ent_mon=StringVar()

#pour stocker les valeurs des mesures du LOC 35R
def archiver():

    mes_archives={
                  "jour" : time.strftime('%d/%m/%y  à  %H:%M:%S', time.localtime()),                
                  "lecture_monitor": ent_mon.get(),                               
                  } 
    textInsert=("\n"+str(mes_archives["jour"])+"\n"+"\nddm lue avant la correction au Monitor 1 :"+str(mes_archives["lecture_monitor"])+"\n\n=======================================\n")

    mon_fichier=open("archives/file.txt", "r")
    #ouverture du fichier texte (data_loc35R)
    text=mon_fichier.read()
    mon_fichier.close()

    fileW = open("archives/file.txt", "w")
    fileW.write(textInsert+text)
    fileW.close()

canvas=Canvas(releves_loc35R)
canvas.place(x=4,y=70)
monitor = LabelFrame(canvas, text="Lecture Monitor 1",padx=5, pady=5,font=('arial',12,'bold'))
monitor.pack(padx=6, pady=6)

entry_monitor = Entry(monitor,font=('arial',10,'bold'),textvariable=ent_mon)
entry_monitor.pack(pady=5)

#bouton d'archivage de la correction
bt_archiver=Button(releves_loc35R,text='Archiver',command=archiver)
bt_archiver.pack(side=LEFT,anchor=SW)

##########################
def affichage_update():
    with open("archives/file.txt","r") as f:
        data = f.read()
        s = Scrollbar(data_loc35R)
        T = Text(data_loc35R)
        s.pack(side=RIGHT, fill=Y)
        T.pack(side=LEFT, fill=Y)
        s.config(command=T.yview)
        T.config(bg='powder blue',font=('arial',14,'bold'),pady=14, yscrollcommand=s.set)
        T.insert(END,data)
    T.after(1000,affichage_update)

affichage_update()

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

root.mainloop()

當我通過labelframe的輸入界面介紹信息時。 它們不會在“文本”窗口小部件中同時顯示,但是存儲在文本文件中,我不知道為什么我創建的更新功能無法正常工作,我需要幫助來解決此問題

每次運行affichage_update() ,您都在創建一個新的Text()小部件,由於某種原因,第一個仍停留在頂部。

而是僅創建一個Text()小部件並更改函數中的內容:

# Building the data tab text widget
s = Scrollbar(data_loc35R)
T = Text(data_loc35R)
s.pack(side=RIGHT, fill=Y)
T.pack(side=LEFT, fill=Y)
s.config(command=T.yview)
T.config(bg='powder blue', font=('arial',14,'bold'),
         pady=14, yscrollcommand=s.set)

##########################
def affichage_update():
    with open("file.txt","r") as f:
        data = f.read()
        T.delete('1.0', END)  # Remove previous content 
        T.insert(END,data)    # Insert text from file
    T.after(1000,affichage_update)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM