こんにちは、私は私のpython guiアプリケーションでいくつかの問題を抱えています、私はセンサーのモードボタンをクリックする以外のアプリはうまく動作します。値 "m"は、gui - appが最初にロードされ、更新されないときと同じままです。私は過去1ヶ月のtkinterの使用を始めました。私はwhileループやそれに類するものを実装する方法を理解するのに苦労しています。私はメインの中にループを配置し、それが終わったときにアプリケーションを再オープンするだけです。アプリは私のraspberryPiで作成されたので、gpioとraspberrypiのすべてのものをコメントアウトして、PC上で動作します。アプリは基本的に2モードタイマーモードとセンサーモードですが、値 "センサー"が50%以下になると関数を入れませんでしたが、私はすでに別のセンサープログラムを持っています更新するセンサー。python tkinter、センサ値はリフレッシュされません
一部のアプリセンサーの値m - mpc3008が常に更新されるようにアプリを修正してください。
# made by edwin martin 02/05/2016
#!/usr/bin/python
from datetime import datetime
from threading import Timer
import sys
import time
import threading
import tkinter
from tkinter import *
from time import sleep
from time import sleep
#t1 = 0
#t2 = 0
#t3 = 0
#t4 = 0
class simpleapp_tk(tkinter.Tk, threading.Thread):
def __init__(self,parent):
tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
self.minsize(width=720, height=180)
self.maxsize(width=720, height=240)
def initialize(self):
self.grid()
#lables
self.labelVariable2 = tkinter.StringVar()
label2 = tkinter.Label(self,textvariable=self.labelVariable2,
anchor="w",fg="white",bg="blue")
label2.grid(column=0,row=0,columnspan=2,sticky='EW')
self.labelVariable2.set(u"ENTER THE HOUR FOR THE START TIME ")
self.entryVariable = tkinter.IntVar()
self.entry = tkinter.Entry (self,textvariable=self.entryVariable)
self.entry.grid(column=0,row=1,sticky='EW')
self.entry.bind("<Return>", self.OnPressEnter)
self.entryVariable.set(u"Enter text here.")
self.labelVariable = tkinter.StringVar()
label = tkinter.Label(self,textvariable=self.labelVariable,
anchor="w",fg="black",bg="yellow")
label.grid(column=0,row=2,columnspan=2,sticky='EW')
self.labelVariable.set(u"")
self.labelVariable4 = tkinter.StringVar()
label4 = tkinter.Label(self,textvariable=self.labelVariable4,
anchor="w",fg="white",bg="blue")
label4.grid(column=0,row=3,columnspan=2,sticky='EW')
self.labelVariable4.set(u"ENTER THE MINUTE FOR THE START TIME")
self.entryVariable2 = tkinter.IntVar()
self.entry = tkinter.Entry(self,textvariable=self.entryVariable2)
self.entry.grid(column=0,row=4,sticky='EW')
self.entry.bind("<Return>", self.OnPressEnter)
self.entryVariable2.set(u"Enter text here.")
self.labelVariable1 = tkinter.StringVar()
label5 = tkinter.Label(self,textvariable=self.labelVariable1,
anchor="w",fg="black",bg="grey")
label5.grid(column=0,row=6,columnspan=2,sticky='EW')
self.labelVariable3 = tkinter.StringVar()
label3 = tkinter.Label(self,textvariable=self.labelVariable3,
anchor="w",fg="black",bg="yellow")
label3.grid(column=0,row=5,columnspan=2,sticky='EW')
#buttons
button = tkinter.Button(self,text=u"ENTER",
command=self.OnButtonClick,anchor="w",fg="black",bg="green")
button.grid(column=1,row=1)
button2 = tkinter.Button(self,text=u"ENTER",
command=self.OnButtonClick2,anchor="w",fg="black",bg="green")
button2.grid(column=1,row=4)
button3 = tkinter.Button(self,text="START TIMER",
command=self.OnButtonClick3,anchor="w",fg="black",bg="green")
button3.grid(column=0,row=6)
button4 = tkinter.Button(self,text="PREVIEW PAGE",
command=self.OnButtonClick4,anchor="w",fg="black",bg="green")
button4.grid(column=1,row=6)
button5 = tkinter.Button(self,text="SENSOR MODE",
command=self.OnButtonClick5,anchor="w",fg="black",bg="purple")
button5.grid(column=0,row=9)
self.labelVariable7 = tkinter.StringVar()
label7 = tkinter.Label(self,textvariable=self.labelVariable7,
anchor="w",fg="black",bg="white")
label7.grid(column=0,row=8,columnspan=2,sticky='EW')
self.labelVariable8 = tkinter.StringVar()
label8 = tkinter.Label(self,textvariable=self.labelVariable8,anchor="w",fg="black",bg="pink")
label8.grid(column=0,row=7,columnspan=2,sticky='EW')
self.grid_columnconfigure(0,weight=1)
self.resizable(True,False)
self.update()
self.geometry(self.geometry())
self.entry.focus_set()
self.entry.selection_range(0, tkinter.END)
def light_on(self):
print ("led on")
self.grid()
self.labelVariable7 = tkinter.StringVar()
label7 = tkinter.Label(self,textvariable=self.labelVariable7,
anchor="w",fg="black",bg="red")
label7.grid(column=0,row=8,columnspan=2,sticky='EW')
self.labelVariable7.set(u"!!WATERING !!")
slep(5)
self.grid()
self.labelVariable7 = tkinter.StringVar()
label7 = tkinter.Label(self,textvariable=self.labelVariable7,
anchor="w",fg="black",bg="white")
label7.grid(column=0,row=8,columnspan=2,sticky='EW')
self.labelVariable7.set(u"")
def OnButtonClick(self):
self.labelVariable.set("You entered: " + str(self.entryVariable.get()))
self.entry.focus_set()
self.entry.selection_range(0, tkinter.END)
def OnButtonClick2(self):
self.labelVariable3.set("You entered: " + str(self.entryVariable2.get()))
self.entry.focus_set()
self.entry.selection_range(0, tkinter.END)
def OnButtonClick3(self):
time=datetime.today()
int (self.entryVariable.get())
int (self.entryVariable2.get())
start=time.replace(day=time.day, hour=self.entryVariable.get(), minute=self.entryVariable2.get(), second=0, microsecond=0)
delta_t=start-time
secs=delta_t.seconds+1
timer = Timer(secs,self.light_on)
timer.start()
self.labelVariable8 = tkinter.IntVar()
label8 = tkinter.Label(self,textvariable=self.labelVariable8,
anchor="w",fg="black",bg="pink")
label8.grid(column=0,row=7,columnspan=2,sticky='EW')
if self.entryVariable.get() >= 12:
self.labelVariable8.set("start time: " + str(self.entryVariable.get())+ ":" + str(self.entryVariable2.get()) + "pm")
elif self.entryVariable.get() < 12:
self.labelVariable8.set("start time: " + str(self.entryVariable.get())+ ":" + str(self.entryVariable2.get()) + "am")
def OnButtonClick4(self):
for widget in app.winfo_children():
widget.destroy()
self.grid()
self.labelVariable2 = tkinter.StringVar()
label2 = tkinter.Label(self,textvariable=self.labelVariable2,
anchor="w",fg="white",bg="blue")
label2.grid(column=0,row=0,columnspan=2,sticky='EW')
self.labelVariable2.set(u"WATERING START TIME ")
self.labelVariable = tkinter.IntVar()
label = tkinter.Label(self,textvariable=self.labelVariable,
anchor="w",fg="black",bg="pink")
label.grid(column=0,row=1,columnspan=2,sticky='EW')
def OnPressEnter(self,event):
print("enter button pressed\nplease use the mouse instead !")
#NOT WORKING IN THIS SECTION WHERE M IS CALLED , THE VALUE JUST STAYS THE SAME AND DOES NOT REFRESH ???????
def display(self):
self.grid()
self.labelVariable = tkinter.IntVar()
label = tkinter.Label(self,textvariable=self.labelVariable,
anchor="w",fg="black",bg="pink")
label.grid(column=0,row=1,columnspan=2,sticky='EW')
self.labelVariable.set("Water Level:%d%%" % m)
def OnButtonClick5(self):
# THIS IS JUST SHOWING AFTER 2 SECONDS, I WANT TO REFRESH EVERY 2 SECONDS
app.after(200, self.display)
# WORKING OK HERE THIS JUST DISPLAYS A HEADER FOR THE SENSOR PAGE
for widget in app.winfo_children():
widget.destroy()
self.grid()
self.labelVariable2 = tkinter.StringVar()
label2 = tkinter.Label(self,textvariable=self.labelVariable2,
anchor="w",fg="white",bg="blue")
label2.grid(column=0,row=0,columnspan=2,sticky='EW')
self.labelVariable2.set(u"WATERING LEVEL")
# M IS LOADED HERE BUT DOES NOT REFRESH
if __name__ == "__main__":
#m = mcp3008.readadc(5)/10+19
app = simpleapp_tk(None)
app.title('WATER BUDDY APP')
app.mainloop()
問題が
def display(self):
self.grid()
self.labelVariable = tkinter.IntVar()
label = tkinter.Label(self,textvariable=self.labelVariable,
anchor="w",fg="black",bg="pink")
label.grid(column=0,row=1,columnspan=2,sticky='EW')
self.labelVariable.set("Water Level:%d%%" % m)
def OnButtonClick5(self):
# THIS IS JUST SHOWING AFTER 2 SECONDS, I WANT TO REFRESH EVERY 2 SECONDS
app.after(200, self.display)
# WORKING OK HERE THIS JUST DISPLAYS A HEADER FOR THE SENSOR PAGE
for widget in app.winfo_children():
widget.destroy()
self.grid()
self.labelVariable2 = tkinter.StringVar()
label2 = tkinter.Label(self,textvariable=self.labelVariable2,
anchor="w",fg="white",bg="blue")
label2.grid(column=0,row=0,columnspan=2,sticky='EW')
self.labelVariable2.set(u"WATERING LEVEL")
# M IS LOADED HERE BUT DOES NOT REFRESH
if __name__ == "__main__":
#m = mcp3008.readadc(5)/10+19
app = simpleapp_tk(None)
app.title('WATER BUDDY APP')
app.mainloop()
例を最小限に抑えることはできますか?これは人々に問題の可能性があることを理解させるのに役立ちます – salomonderossi
私はコードをすばやく編集して実行していますが、問題がどこにあるのか、問題がどこにあるのかは、関数__display__と__main__のコードの一番下に位置します。 – edwin
@エドウィン私は彼らがあなたに[MCVE](http://stackoverflow.com/help/mcve)を作るように頼んでいると信じています。 Tkinterとこの特定の問題では、10〜15行のコードが必要です。しかし、これはとにかく重複しています。また、 'after'にはミリ秒かかります。 200は0.2秒ごとに更新されます。 * '2000' *を2秒間欲しい。 –