Je fais un projet assez facile que beaucoup ont fait auparavant. Voici ma configuration matérielle:Tkinter fuite de mémoire
Raspberry Pi 3 w/16 Go carte SD
DHT11 Température du capteur d'humidité
Raspberry Pi 7" Affichage
J'utilise Tkinter avec Python 2.7 et bibliothèque Adafruit_DHT.
Le code est très basique
from Tkinter import *
import tkFont
import Adafruit_DHT
import sys
import time
temp = 0
win = Tk()
win.title("Temperature")
sans = tkFont.Font(family='FreeSansBold', size=28, weight=tkFont.BOLD)
Label(win, text="Temperature", relief=SUNKEN, width=15, font=sans).grid(row=0, column=0)
Label(win, text="Humidity", relief=SUNKEN, width=15, font=sans).grid(row=1, column=0)
Label(win, text="Date/Time", relief=SUNKEN, width=15, font=sans).grid(row=2, column=0)
def READ():
global temp
humidity, temperature = Adafruit_DHT.read_retry(11, 4)
temp = temperature*9/5.0 + 32
Label(win, text=temp, relief=RIDGE, width=15, fg="black", bg="white", font=sans).grid(row=0, column=1)
Label(win, text=humidity, relief=RIDGE, width=15, fg="black", bg="white", font=sans).grid(row=1, column=1)
Label(win, text=time.strftime("%b %d %I:%M"), relief=RIDGE, width=15, fg="black", bg="white", font=sans).grid(row=2, column=1)
def read_every_second():
READ()
win.after(1000, read_every_second)
win.after(1000, read_every_second)
mainloop()
Cela fonctionne très bien, sauf qu'il provoque une fuite de mémoire. Je suis sûr qu'il oblige les boucles sans fin avec le « win.after (1000, read_every_second) appeler cependant, je ne sais pas comment le résoudre.
Toute aide serait appréciée.
Vous créez trois nouvelles étiquettes pour chaque lecture. Pourquoi ne pas changer les anciens? –
Pour modifier le texte d'une étiquette, voir: [Modifier le texte d'une étiquette] (https://stackoverflow.com/questions/17125842/changing-the-text-on-a-label) ou [Comment modifier le texte de l'étiquette Tkinter appuyez sur le bouton] (https://stackoverflow.com/questions/29828477/how-to-change-tkinter-label-text-on-button-press) – Lafexlos
pouvez-vous donner un exemple? –