У меня есть малина Pi 2, и я пытаюсь создать графический интерфейс для управления светодиодом. Я нашел решение для этого, и он работает нормально до сих пор. Я делаю это с Python и Tkinter (я довольно новичок в обоих).Python tkinter и малина Pi аппаратная кнопка
Однако я подключил аппаратную кнопку к малине, но до сих пор я не могу заставить аппаратную кнопку и GIU работать вместе. Вот то, что у меня есть - окно с двумя кнопками - включите светодиод On и Quit (ясно, что это делает). Когда я нажимаю кнопку «Включить светодиод», он загорается светодиодом на макете, а текст кнопки изменяется на «Отключение светодиода», а когда я нажимаю его снова, он выключает светодиод и снова меняет текст кнопки. Какова роль аппаратной кнопки - когда я ее нажимаю - если светодиод выключен, он должен включить его и изменить текст кнопки, и если светодиод горит - при нажатии аппаратная кнопка должна выключить светодиод и изменить текст кнопки снова.
Я проверил другие сообщения, и я попробовал метод after, и кнопка аппаратного обеспечения работает, но когда я нажимаю первую кнопку - приложение замерзает. Вот код, который у меня есть до сих пор:
#! /usr/bin/python
from tkinter import *
import RPi. GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.output(17, GPIO.LOW)
GPIO.setup(10, GPIO.IN)
def buttonp():
while True:
if GPIO.input(10) == False:
if (GPIO.input(17) == True):
GPIO.output(17, GPIO.LOW)
ledButton["text"] = "Turn LED On"
else:
GPIO.output(17, GPIO.HIGH)
ledButton["text"] = "Turn LED Off"
root.after(2000, buttonp)
def toggle():
if GPIO.input(17):
GPIO.output(17, GPIO.LOW)
ledButton["text"] = "Turn LED On"
else:
GPIO.output(17, GPIO.HIGH)
ledButton["text"] = "Turn LED Off"
def quit():
GPIO.output(17, GPIO.LOW)
exit()
root = Tk()
root.title("LED Controler")
root.minsize(width = 800, height = 600)
ledButton = Button(root, text = "Turn LED on", command = toggle)
ledButton.pack(side = LEFT)
quitButton = Button(root, text = "Quit", command = quit)
quitButton.pack(side = LEFT)
root.after(2000, buttonp)
root.mainloop()
Было бы признательно, если бы кто-то мог мне помочь в этом.
С уважением,
Иван
Это зависает, потому что у вас бесконечный цикл. Ваш цикл while никогда не заканчивается и, похоже, даже не пытается прекратить действие. –
Ну, есть ли способ проверить, нажата ли аппаратная кнопка без использования цикла? Мне все еще нужен GUI, хотя .... – Ivan
Да. Это то же самое, как если бы вы делали анимацию. Напишите функцию, которая выполняет проверку, а затем используйте метод tkinter 'after' для регулярного вызова этой функции. Базовый шаблон описан здесь: http://stackoverflow.com/a/11505034/7432. Независимо от того, рисуете ли вы кадр анимации или опрос устройства, шаблон тот же. –