Если заявление для кнопки - PullRequest
0 голосов
/ 15 января 2020

работаю над этим уже пару дней, создание автоматизированного попса может сокрушить ... итак .... соленоид (использующий реле просто для простоты), включается при запуске, остается включенным, но я могу использовать свой Кнопка «Стоп», чтобы остановить его, и моя кнопка «Старт», чтобы запустить его снова. я не могу понять, как включить мои операторы «if» и строку «range (2)» в мою кнопку «start», так что, скажем, я запускаю его 100 раз и хочу «остановить» его в любой момент времени ..... затем как только я выхожу из своего окна (виджета), мой оператор «IF» выполняет все остальное, мой код корректен без каких-либо ошибок, только проблемы с позиционированием… возможно, спасибо за всю помощь и информацию, это очень ценится!

import RPi.GPIO as GPIO
import time
from tkinter import *
import tkinter.font as font

root = Tk()
root.geometry('500x500')      #size of window

class CanSmasher:
    def __init__(self, master):
        frame = Frame(master)
        frame.pack()

        myFont = font.Font(size=20)     #define Font

    self.printButton = Button(frame, text="Start", bg="green", fg="black", command = lambda: solenoid_off(21),width=20, height=5)
    self.printButton['font'] = myFont
    self.printButton.pack()

     self.quitButton = Button(frame, text ="Stop", bg="red", fg="black", command = lambda: solenoid_on(21), width=20, height=5)
    self.quitButton['font'] = myFont
    self.quitButton.pack()

channel = 21

# GPIO setup
GPIO.setmode(GPIO.BCM)
GPIO.setup(channel, GPIO.OUT)

def solenoid_on(pin):
    GPIO.output(pin, GPIO.HIGH)   # Turn solenoid on
def solenoid_off(pin):
    GPIO.output(pin, GPIO.LOW)    # Turn solenoid off

c=CanSmasher(root)
root.mainloop()  

if __name__ == '__main__':
    try:
        for i in range(2):        # Number of times ran is writen in ==> [range(put run times here)]

            solenoid_on(channel)
            time.sleep(1)         # Sets lag time

            solenoid_off(channel)
            time.sleep(1)         # Sets run time
        print("Cans Crushed", i+1)

        GPIO.cleanup()

    except KeyboardInterrupt:
        GPIO.cleanup()

1 Ответ

0 голосов
/ 15 января 2020

Для начала посмотрите на строку

self.quitButton = Button(frame, text ="Stop", bg="red", fg="black", command = lambda: solenoid_on(21), width=20, height=5)

. Уверен, что слишком много места. Может быть, это произошло при копировании ... просто чтобы узнать об этом.

Я думаю, что перемещение:

    root = Tk()
    root.geometry('500x500')      #size of window

    c=CanSmasher(root)
    root.mainloop()`

в выражение if должно быть ответом, как указано в комментарии @Preston Hager

Последний совет: подумайте над чтением / следованием стилевому руководству python. Это облегчит использование и чтение вашего кода для других python разработчиков. Например, это будет включать в себя изменение printButton на print_button и то же самое для quitButton
Python -Style-Guide

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...