2014-05-21 50 views
1
from Tkinter import * 
    import tkFont 
    import Tkinter 
    import RPi.GPIO as GPIO 

    GPIO.setmode(GPIO.BCM) 
    GPIO.setup(10, GPIO.IN) 


    class PersamaanKuadrat: 
     def __init__(self, parent, title): 
      self.parent = parent 

      #self.parent.geometry("1280x560") 
      self.parent.title(title) 
      self.parent.protocol("WM_DELETE_WINDOW") 

      self.aturKomponen() 



     def aturKomponen(self): 

      self.customFont = tkFont.Font(family="Helvetica", size=18) 

      mainCanvas = Canvas(self.parent, width=1300, height=600, bg="grey") 
      mainCanvas.pack(fill=BOTH, expand=YES) 

      self.kanvas = mainCanvas 


      self.btnCariAkar = Button(mainCanvas, text="ENTER!", 
       command=exit) 
      self.btnCariAkar.place(relx=.25, rely=.25) 

      self.btn1= Button(mainCanvas, padx=30, pady=30, text="A1", bg="white") 
      self.btn1.place(relx=.65, rely=.25) 

      self.btn2 = Button(mainCanvas, padx=30, pady=30, text="A2", bg="white") 
      self.btn2.place(relx=.80, rely=.25) 

      self.btn3 = Button(mainCanvas, padx=30, pady=30, text="B1", bg="white") 
      self.btn3.place(relx=.65, rely=.55) 


      self.btn4 = Button(mainCanvas, padx=30, pady=30, text="B2", bg="white") 
      self.btn4.place(relx=.80, rely=.55) 

     def atur(self): 
      inputValue = GPIO.input(10) 
      if(inputValue == True): 
       self.btn1.configure(bg="yellow") 
      else: 
       self.btn1.configure(bg="red") 


    if __name__ == '__main__': 
     root = Tk() 

     aplikasi = PersamaanKuadrat(root, "T") 

     root.mainloop() 
  1. 我想通过按下按钮,其连接到GPIO引脚(引脚10)改变BTN1的颜色,例如,如果我推按钮时,BTN1更改颜色插件会有黄色,如果我不推它,颜色会变成红色。当我运行模块时,没有错误,程序正常工作。但是当我按下按钮时,btn1的颜色没有改变。我找不到这个错误,你们都可以帮助我吗?
  2. 如果我想添加定时器功能,例如30秒后,btn1的颜色会从黄色变回红色,有可能吗?
  3. 我可以使用'和'为这个程序。例如,如果我想使用2个按钮将其更改为绿色,我应该怎么做?

需要帮助,因为我为这个事情树莓一个新手,谢谢:)通过在覆盆子使用GPIO

回答

0

1)我认为你需要定时器运行atur()测试是否被按下按钮。现在程序不知道你按的按键

__init__()atur()

self.parent.after(10, self.atur) 

2)是的,它是可能的self.parent.after(milliseconds, function_name)

3)你的意思是两按钮按钮连接到GPIO?我想是的。


编辑:

实施例带定时改变每500ms btn2颜色。
我想现在程序应该按下按钮来改变btn1的颜色。 (未测试)

from Tkinter import * 
import tkFont 
import Tkinter 
import RPi.GPIO as GPIO 

GPIO.setmode(GPIO.BCM) 
GPIO.setup(10, GPIO.IN) 


class PersamaanKuadrat: 
    def __init__(self, parent, title): 
     self.parent = parent 

     #self.parent.geometry("1280x560") 
     self.parent.title(title) 
     self.parent.protocol("WM_DELETE_WINDOW") 

     self.aturKomponen() 

     self.parent.after(10, self.atur) 
     self.parent.after(500, self.change_color) 


    def aturKomponen(self): 

     self.customFont = tkFont.Font(family="Helvetica", size=18) 

     mainCanvas = Canvas(self.parent, width=1300, height=600, bg="grey") 
     mainCanvas.pack(fill=BOTH, expand=YES) 

     self.kanvas = mainCanvas 


     self.btnCariAkar = Button(mainCanvas, text="ENTER!", 
      command=exit) 
     self.btnCariAkar.place(relx=.25, rely=.25) 

     self.btn1= Button(mainCanvas, padx=30, pady=30, text="A1", bg="white") 
     self.btn1.place(relx=.65, rely=.25) 

     self.btn2 = Button(mainCanvas, padx=30, pady=30, text="A2", bg="white") 
     self.btn2.place(relx=.80, rely=.25) 

     self.btn3 = Button(mainCanvas, padx=30, pady=30, text="B1", bg="white") 
     self.btn3.place(relx=.65, rely=.55) 


     self.btn4 = Button(mainCanvas, padx=30, pady=30, text="B2", bg="white") 
     self.btn4.place(relx=.80, rely=.55) 

    def atur(self): 
     print "test push-button" 
     inputValue = GPIO.input(10) 
     if(inputValue == True): 
      self.btn1.configure(bg="yellow") 
     else: 
      self.btn1.configure(bg="red") 
     self.parent.after(10, self.atur) 

    def change_color(self): 
     print "change_color" 
     if self.btn2['bg'] == 'yellow': 
      self.btn2['bg'] = 'red' 
     else: 
      self.btn2['bg'] = 'yellow' 
     self.parent.after(500, self.change_color) 

if __name__ == '__main__': 
    root = Tk() 

    aplikasi = PersamaanKuadrat(root, "T") 

    root.mainloop() 
+0

感谢furas,它帮助了我很多,我可以联系你,其实我发现了一个新的问题,我想直接问你,如果你不介意的话,当然:) – user3611502

+0

我电子邮件:[email protected] – furas