我是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()
。
答案 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窗口。希望它有所帮助。