第一个项目,Python 3 在 pi 上,一开始似乎无法 运行
First project, Python 3 on a pi, can't seem to get it running right at start
我需要做一个简单的东西,这似乎是一个很好的学习入门项目 python。我遵循了这个 GPIO 音乐盒教程 (https://projects.raspberrypi.org/en/projects/gpio-music-box),它 运行 在 MU,Thonny Python IDE 中很好,但是当我 运行 在 Geany 上时它会在终端中打开,运行 结束,按下按钮时不发出声音。我需要的是让此脚本在 raspbian 启动后自动启动并在启动时播放声音。我已经尝试编辑 rc.local、bashrc 和 crontab 以进行自动启动。
所以这是在 pi3 上 运行ning,脚本基本上是这样的:
import pygame from
gpiozero import Button
pygame.init()
drum = pygame.mixer.Sound("/home/pi/gpio-music-box/samples/drum_tom_mid_hard.wav")
cymbal = pygame.mixer.Sound("/home/pi/gpio-music-box/samples/drum_cymbal_hard.wav")
snare = pygame.mixer.Sound("/home/pi/gpio-music-box/samples/drum_snare_hard.wav")
bell = pygame.mixer.Sound("/home/pi/gpio-music-box/samples/drum_cowbell.wav")
btn_drum = Button(4)
btn_drum.when_pressed = drum.play
这是否不起作用,因为当脚本在终端中 运行 时,它不会导入此 python 库?我唯一的其他编程经验是在 Crestron 设备上进行简单的 C# 项目。
谢谢
您所做的只是加载声音。为了播放声音,您需要输入例如
drum.play()
为了让鼓声响起。
终端中的程序运行将在执行完所有代码后终止。如果你想要一个被动坐下并监听用户输入的程序,你需要添加一个循环来保持程序 运行ning。基本结构如下所示(取自https://realpython.com/pygame-a-primer/#setting-up-the-game-loop)
# Variable to keep the main loop running
running = True
# Main loop
while running:
# Look at every event in the queue
for event in pygame.event.get():
# Did the user hit a key?
if event.type == KEYDOWN:
# Was it the Escape key? If so, stop the loop.
if event.key == K_ESCAPE:
running = False
# Did the user click the window close button? If so, stop the loop.
elif event.type == QUIT:
running = False
如果你对这个结构不熟悉的话,思路是只要变量运行ning = True,程序就会在每次执行到末尾的时候一直回到while行。当您确实想要结束程序时,例如允许用户按退出键退出,您可以添加一个事件侦听器,如图所示,将 运行ning 变量更改为 false。
如果我对你的问题的理解正确,请将所有初始化和导入放在脚本的开头,然后将所有事件侦听器放在循环中。我强烈建议您也通读 pygame 文档。
我需要做一个简单的东西,这似乎是一个很好的学习入门项目 python。我遵循了这个 GPIO 音乐盒教程 (https://projects.raspberrypi.org/en/projects/gpio-music-box),它 运行 在 MU,Thonny Python IDE 中很好,但是当我 运行 在 Geany 上时它会在终端中打开,运行 结束,按下按钮时不发出声音。我需要的是让此脚本在 raspbian 启动后自动启动并在启动时播放声音。我已经尝试编辑 rc.local、bashrc 和 crontab 以进行自动启动。
所以这是在 pi3 上 运行ning,脚本基本上是这样的:
import pygame from
gpiozero import Button
pygame.init()
drum = pygame.mixer.Sound("/home/pi/gpio-music-box/samples/drum_tom_mid_hard.wav")
cymbal = pygame.mixer.Sound("/home/pi/gpio-music-box/samples/drum_cymbal_hard.wav")
snare = pygame.mixer.Sound("/home/pi/gpio-music-box/samples/drum_snare_hard.wav")
bell = pygame.mixer.Sound("/home/pi/gpio-music-box/samples/drum_cowbell.wav")
btn_drum = Button(4)
btn_drum.when_pressed = drum.play
这是否不起作用,因为当脚本在终端中 运行 时,它不会导入此 python 库?我唯一的其他编程经验是在 Crestron 设备上进行简单的 C# 项目。
谢谢
您所做的只是加载声音。为了播放声音,您需要输入例如
drum.play()
为了让鼓声响起。
终端中的程序运行将在执行完所有代码后终止。如果你想要一个被动坐下并监听用户输入的程序,你需要添加一个循环来保持程序 运行ning。基本结构如下所示(取自https://realpython.com/pygame-a-primer/#setting-up-the-game-loop)
# Variable to keep the main loop running
running = True
# Main loop
while running:
# Look at every event in the queue
for event in pygame.event.get():
# Did the user hit a key?
if event.type == KEYDOWN:
# Was it the Escape key? If so, stop the loop.
if event.key == K_ESCAPE:
running = False
# Did the user click the window close button? If so, stop the loop.
elif event.type == QUIT:
running = False
如果你对这个结构不熟悉的话,思路是只要变量运行ning = True,程序就会在每次执行到末尾的时候一直回到while行。当您确实想要结束程序时,例如允许用户按退出键退出,您可以添加一个事件侦听器,如图所示,将 运行ning 变量更改为 false。
如果我对你的问题的理解正确,请将所有初始化和导入放在脚本的开头,然后将所有事件侦听器放在循环中。我强烈建议您也通读 pygame 文档。