from tkinter import *
from threading import Timer
.......
def getdata(dval):
global log,entryWidget,txtf,infile,lout
ff="c:\\downloads\test\logs\\log1.log"
flog=open(ff,encoding="utf-8")
infile= flog.read()
flog.close()
def getlog(sval):
global log,entryWidget,txtf,infile,lout
txtf.delete ('1.0','end')
inf =entryWidget.get().strip()
if inf == "scan":
gdata = getdata("")
txtf.insert (END,gdata)
else:
gdata=str(datetime.now())+"\n"
txtf.insert (END,gdata)
gdata=""
ev=Timer(60,getlog,[lout])
ev.start()
def runscan():
global log,entryWidget,txtf,infile,lout
root =Tk()
root.title("Scan log")t
textFrame = Frame(root)
txtf= Text(textFrame,width=60,height=18,font=("MS Sans Serif bold",8))
entryWidget = Entry(textFrame)
textFrame.grid(row=200,column=200)
textFrame.bind("<Button-1>", getlog(lout)
txtf.grid(row=0,column=1)
entryWidget["width"] = 30
entryWidget.bind('<Return>',getlog(10))
entryWidget.grid(row=25,column=1)
ev=Timer(60,getlog,[10])
ev.start()
root.mainloop()
if __name__ == "__main__":
runscan()
La minuterie fonctionne correctement toutes les 60 secondes, mais pas le widget d'entrée .
Si je sors la minuterie le Entrywidget fonctionne bien.
Donc, quelque part le thread minuteur verrouille l'entrée du widget.
Il semblerait que le temporisateur dans la boucle principale
nécessite une fonction de réinitialisation et non dans la fonction getlog.Utilisation de la minuterie tkinter avec les widgets d'entrée
Merci Bryan vérifier –
ne fonctionne pas entryWidget est toujours accroché. –
@MNewton: bien, si 'getdata (" ")' peut bloquer, alors oui, cela provoquera le blocage de votre programme. Puisque vous n'avez pas envoyé le code pour 'getdata', il est impossible de le dire avec certitude. –