2016-05-03 25 views
-1

こんにちは、私は私の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() 
+2

例を最小限に抑えることはできますか?これは人々に問題の可能性があることを理解させるのに役立ちます – salomonderossi

+0

私はコードをすばやく編集して実行していますが、問題がどこにあるのか、問題がどこにあるのかは、関数__display__と__main__のコードの一番下に位置します。 – edwin

+0

@エドウィン私は彼らがあなたに[MCVE](http://stackoverflow.com/help/mcve)を作るように頼んでいると信じています。 Tkinterとこの特定の問題では、10〜15行のコードが必要です。しかし、これはとにかく重複しています。また、 'after'にはミリ秒かかります。 200は0.2秒ごとに更新されます。 * '2000' *を2秒間欲しい。 –

答えて

0

WOOOOのTYウェイン:) はい私がしなければならなかったすべては変化する1行だったと、別の貼り付けをどこにあるか、この最後の部分がある。 ありがとうございました。

def display(self): 
     import mcp3008 
     m = mcp3008.readadc(5)/10+19 
     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) 
     self.after(200, self.display) 
    def OnButtonClick5(self): 
     app.after(200, self.display)  
     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") 
if __name__ == "__main__": 
     app = simpleapp_tk(None) 
     app.title('WATER BUDDY APP') 
     app.mainloop() 
+0

私は今、私は今、センサーページのタイマボタンに戻ったが、それがページをロードすると、タイマが実行し続け、 – edwin

関連する問題