Python布尔值重置自身

时间:2017-10-16 08:30:31

标签: python raspberry-pi boolean

我有一个小的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。

我从剧本中得到了印刷品的输出:

  • 开始主要
  • 状态
  • 在if:
  • 之后
  • True<<<<那么布尔值是正确的!
  • 停止
  • 错误<<<<但为什么再次出现错误!?
  • 端.....

1 个答案:

答案 0 :(得分:2)

我会谈谈你的问题:

问题在于您正在修改局部变量但不会反映到外部变量。

您将status传递给statusMovie,并希望将其从True切换为False或从False切换为True。但实际上,您只需切换本地status,而不是外部status。如果您想切换外部status,则需要status = statusMovie(status)

明确更新