python GPIO引脚不会被清除

时间:2015-07-02 00:54:33

标签: python raspberry-pi

我是python的初学者,并决定试一试我的覆盆子pi。我从一本涵盖基础知识的小书中学到了python,我结合了演示,用一个切换按钮改变了Tkinter窗口的背景颜色,点亮了一个LED来获取这段代码:

#! /usr/bin/env python
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD); GPIO.setup(7, GPIO.OUT)
GPIO.output(7, False)
from Tkinter import*
window = Tk()
window.title("Relay Button")
window.configure(bg= "green")
btn_end= Button(window, text = "close", command=exit)
def tog():
        if ( GPIO.input(7) == True ):
                GPIO.output(7, False)
        else:
                GPIO.output(7, True)
btn_tog=Button( window, text="Switch", command=tog)
btn_end.pack(padx=100, pady=20)
btn_tog.pack(padx=100, pady=20)
window.mainloop()
GPIO.cleanup()

我收到错误:

relaybutton.py:3: RuntimeWarning: This channel is already in use,
continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  GPIO.setmode(GPIO.BOARD); GPIO.setup(7, GPIO.OUT)

我不知道为什么会收到此错误,我最后会GPIO.cleanup()

1 个答案:

答案 0 :(得分:1)

那是因为你的程序没有执行代码的那部分。当你编写tkinter应用程序时,mainloop()是一个无限循环。

您可以修改代码以使其正常工作。

#! /usr/bin/env python
import RPi.GPIO as GPIO
from Tkinter import*
def on_closing():
    GPIO.cleanup()
    window.destroy()
GPIO.setmode(GPIO.BOARD); 
GPIO.setup(7, GPIO.OUT)
GPIO.output(7, False)
window = Tk()
window.title("Relay Button")
window.configure(bg= "green")
btn_end= Button(window, text = "close", command=exit)
def tog():
        if ( GPIO.input(7) == True ):
                GPIO.output(7, False)
        else:
                GPIO.output(7, True)
btn_tog=Button( window, text="Switch", command=tog)
btn_end.pack(padx=100, pady=20)
btn_tog.pack(padx=100, pady=20)
window.protocol("WM_DELETE_WINDOW", on_closing)
window.mainloop()

你可以看到我绑定了on_closing函数,它会为你清理并破坏你的Tk.tk窗口。希望它有所帮助。