2017-06-14 29 views
0

私はずっと簡単なプロジェクトをやっています。ここに私のハードウェアのセットアップは次のとおりです。Tkinterのメモリリーク

ラズベリーパイ3 16ギガバイトのSDカード/ wの

DHT11温度湿度センサーは

ラズベリーパイ7" 表示

私は、Python 2.7とAdafruit_DHTライブラリとのTkinterを使用しています。

は、コードは非常に基本的なものです

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() 

それはメモリリークを引き起こすことを除いて、素晴らしい作品です。私はそれが「win.after(1000年、read_every_second)が呼び出すと無限ループを強制されていることを確信して、私はそれを修正する方法がわからない。

任意の助けをいただければ幸いです。それらに

+2

読み取りごとに3つの新しいラベルを作成しています。古いものを変えてみませんか? –

+0

ラベルのテキストを変更するには、[ラベル上のテキストを変更する](https://stackoverflow.com/questions/17125842/changing-the-text-on-a-label)または[Tkinterラベルのテキストを変更する方法ボタンを押す](https://stackoverflow.com/questions/29828477/how-to-change-tkinter-label-text-on-button-press) – Lafexlos

+0

例を挙げることができますか? –

答えて

0

感謝しています私は完全に私のコードを再加工し、漏れを排除してきた...

を掲載。

は、私は熟練したプログラマはないですけど、私は他の人が、私は(他の人が助けを借りて)何をしたかのアイデアを得ることができます投稿午前このプロジェクトを仕事にしてください。

from Tkinter import * 
import Adafruit_DHT 
import time 
import tkFont 
from PIL import ImageTk, Image 

master = Tk() 

sans = tkFont.Font(family='FreeSansBold', size=52) #weight=tkFont.BOLD) 
#sans = tkFont.Font(family='Roboto', size=52) 
dkblue = '#0b1c3c' 

master.geometry("700x400") 
master.configure(background=dkblue) 

temperature = 0 
humidity = 0 

original = Image.open("./Downloads/fish.png") 
resized = original.resize((100, 100), Image.ANTIALIAS) 
image = ImageTk.PhotoImage(resized) 


m1 = Label(master, text = 'Temp ', bg = dkblue, fg = 'yellow', font = sans)#, relief = RIDGE, borderwidth = 5) 
m1.grid(row = 0, column = 0, sticky = E) 

w1 = Label(master, text= temperature, bg = dkblue, fg = 'white', font = sans) 
w1.grid(row = 0, column = 1, sticky = W) 

m2 = Label(master, text = 'Humid ', bg = dkblue, fg = 'yellow', font = sans)#, relief = RIDGE, borderwidth = 5) 
m2.grid(row = 1, column = 0, sticky = E) 

w2 = Label(master, text = humidity, bg = dkblue, fg = 'white', font = sans) 
w2.grid(row = 1, column = 1, sticky = W) 

t1 = Label(master, text = 'Date ', bg = dkblue, fg = 'yellow', font = sans) 
t1.grid(row = 2, column = 0, sticky = E) 

t2 = Label(master, text = time.strftime('%b %d'), bg = dkblue, fg = 'white', font = sans) 
t2.grid(row = 2, column = 1, sticky = W) 

t3 = Label(master, text = 'Time ', bg = dkblue, fg = 'yellow', font = sans) 
t3.grid(row = 3, column = 0, sticky = E) 

t3 = Label(master, text = time.strftime('%I:%M:%S'), bg = dkblue, fg = 'white', font = sans) 
t3.grid(row = 3, column = 1, sticky = W) 

imglabel = Label(master, image=image, bg = dkblue) 
imglabel.grid(row = 0, column = 2, sticky = E) 

def CHANGE(): 
    global temperature 
    global humidity 
    humidity, temperature = Adafruit_DHT.read_retry(11, 4) 
    temperature = (temperature * 9/5.0 + 32) 
    w1.config(text = temperature) 
    w2.config(text = humidity) 
    t2.config(text = time.strftime('%b %d')) 
    t3.config(text = time.strftime('%I:%M:%S')) 
    master.after(2000, CHANGE) 

master.after(2000, CHANGE) 

mainloop()