我有一个小的python脚本可以启动电影,我可以通过按下按钮暂停电影。但按下相同的按钮我无法再次播放电影。 我在覆盆子上运行它,所以我听GPIO引脚。
import RPi.GPIO as GPIO
from omxplayer.player import OMXPlayer
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(True)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
movie1 ='/home/pi/Downloads/big_buck_bunny_480p_surround-fix.avi'
status = None
def getButtonPress():
while 1:
if GPIO.input(18) == False:
return True
break
def statusMovie(status):
print('Status')
print(status)
print('after if:')
if status == True:
status = not status
print(status)
return status
else:
status = not status
print(status)
return status
def main():
print('begin main')
print(status)
try:
player = OMXPlayer(movie1)
while True:
if getButtonPress() == True:
if statusMovie(status) == True:
player.pause()
print('Stopping')
print(status)
print('end.....')
else:
player.play()
print('restarting movie')
print(status)
print('end.....')
sleep(2)
except KeyboardInterrupt:
print('Closing Player')
GPIO.cleanup()
if __name__ == "__main__":
if status is None:
status = False
main()
电影开始播放,我可以按下按钮暂停电影。
问题是我的状态布尔值。我在运行脚本的开始时将它分配给False,不确定这是否是正确的位置。然后我在statesMovie(status)
函数中检查并更改它。
我也改变了布尔值,所以当我再次按下按钮时,它不仅可以暂停电影..而且还可以再次播放电影。
我不知道如何,但是stateMovie(status)
函数返回值,它在主函数中将值总是更改为False。
我从剧本中得到了印刷品的输出:
答案 0 :(得分:2)
我会谈谈你的问题:
问题在于您正在修改局部变量但不会反映到外部变量。
您将status
传递给statusMovie
,并希望将其从True
切换为False
或从False
切换为True
。但实际上,您只需切换本地status
,而不是外部status
。如果您想切换外部status
,则需要status = statusMovie(status)