Итак, я делаю простой спортивный семафор для отображения результатов и времени.Я использую TkInter для GUI и GPIO (физические кнопки), чтобы добавлять оценки, ставить паузу / сбрасывать оценки и т.д. ... Когда я запускаю таймер / программу с помощью кнопки GPIO, другие кнопки GPIO больше не работают, и я не могу понять, почему.Я не могу добавить оценки или поставить таймер на паузу ... Если я запускаю программу с помощью кнопки GUI, она работает нормально, и я могу добавлять оценки, ставить таймер на паузу с помощью других кнопок GUI.Вот код, и я думаю, что есть некоторая проблема с передачей «корня».Кроме того, когда нажата кнопка GPIO, она передает аргумент, поэтому мне пришлось использовать это «что-то» для функций, а когда вы нажимаете кнопку GUI, нечего передавать функциям.В общем, когда я нажимаю кнопку GUI для вызова start (), все работает, когда я начинаю с кнопки GPIO, добавление партитур и других кнопок GPIO не работают
import RPi.GPIO as GPIO
import Tkinter as tk
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def fun_score1(smth):
global score1
score1 += 1
label_team1['text'] = 'Team 1: ' + str(score1)
def fun_score2(smth):
global score2
score2 += 1
label_team2['text'] = 'Team 2: ' + str(score2)
def start():
global count_flag, count
count_flag = True
while True:
if count_flag == False:
break
# put the count value into the label
label_time['text'] = str(count)
# wait for 0.1 seconds
time.sleep(0.1)
# needed with time.sleep()
root.update()
# increase count
count += 0.1
def stop(smth=1):
global count_flag, count, score1, score2
count_flag = False
count = 0.0
score1 = 0
score2 = 0
label_time['text'] = str(count)
label_team1['text'] = 'Team 1: ' + str(score1)
label_team2['text'] = 'Team 2: ' + str(score2)
def pause(smth=1):
global count_flag
count_flag = False
count = 0.0
score1 = 0
score2 = 0
root = tk.Tk()
# this will be a global flag
count_flag = True
# create needed widgets
label_time = tk.Label(root, text='0.0')
label_team1 = tk.Label(root, text='Team 1: ' + str(score1))
label_team2 = tk.Label(root, text='Team 2: ' + str(score2))
#btn_pause = tk.Button(root, text='Pause', command=pause)
btn_start = tk.Button(root, text='Start', command=start)
#btn_stop = tk.Button(root, text='Reset', command=stop)
btn_start.grid(row=1, column=0, padx=5, pady=5)
#btn_stop.grid(row=1, column=2, padx=5)
#btn_pause.grid(row=1, column=1, padx=5)
label_time.grid(row=0, column=0, columnspan=2)
label_team1.grid(row=2, column=0, padx=5, pady=5)
label_team2.grid(row=2, column=3, padx=5, pady=5)
GPIO.add_event_detect(22, GPIO.RISING, callback=start, bouncetime=300)
GPIO.add_event_detect(24, GPIO.RISING, callback=stop, bouncetime=300)
GPIO.add_event_detect(23, GPIO.RISING, callback=pause, bouncetime=300)
GPIO.add_event_detect(4, GPIO.RISING, callback=fun_score1, bouncetime=300)
GPIO.add_event_detect(17, GPIO.RISING, callback=fun_score2, bouncetime=300)
# start the event loop
root.mainloop()