在Raspberry中使用GPIO更改颜色小部件

时间:2014-05-21 14:16:36

标签: python-2.7 colors tkinter raspberry-pi gpio

    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个按钮将其更改为绿色,我该怎么办?
  4. 需要帮助,因为我是这个覆盆子的新手,谢谢:)

1 个答案:

答案 0 :(得分:0)

1)我认为您需要计时器才能运行atur()来测试是否按下了按钮。现在程序还不知道你按了按钮

__init__()atur()中:

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

2)是的,可以使用self.parent.after(milliseconds, function_name)

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


修改

计时器每500毫秒改变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()