2026 / 08 / 31
YABO鸭脖官网-让音乐丰富起来 ——对Python turtle进行拓展

【电脑报于线】于Scratch中,小猫是可以唱歌的,并且Scratch的声音木块有着富厚的功效,于这方面Python turtle略有短缺,今天咱们就来完美一下。

相识Python声音模块

Python处置惩罚声音的模块许多,可是咱们要实现的功效其实不繁杂,以是只需要用到winsound这个体系自带的模块就行了.咱们要的只是实现近似scratch的功效,用不到很繁杂的功效的,固然Python可以或许做的比scratch多多了.

Python源代码的布局(图1)对于造型的操作也从头界说了一些函数,与scratch的积木块相对于应。于Python turtle基础长进行扩充而不是利用Pygame、Pyglet等繁杂的库是由于Python turtle自己为了教小YABO鸭脖官网孩子编程设计的,于布局上越发切合小孩子的进修习气,对于交互式编程友爱,而pygame及pyglet不具有这两个特色。

此中焦点的turtle继续自RawTurtle类(图2),而RawTurtle继续自TPen及TNavigator,两个类别离节制画笔的绘制及挪动,简朴的来讲TPen承载的是近似Scratch中画笔积木类的功效(图3),而TNavigator更多的承载了动作积木类的功效。

以是要实现Python turtle的声音功效,只要从头写一个声音相干的类,然后让RawTurtle继续这个声音类就ok了,固然还有要留意一个问题,turtle所有的类都要插手到_tg_turtle_functions这个列表中,这个列表生存了turtle所有的要领,用来包管于交互式号令行里,默许turtle的各类要领可以直接作为函数挪用.

实现TSound类Scratch积木块对于应的Python

动工,为了实现TSound,需要Scratch积木块对于应的Python一步步的来实现。先导入winsound库并生命类,运用winsound模块的时辰,可以拜候其于官方的文档,这里先容播放声音的要领:winsound.PlaySound('d:\coding\maow.wav',winsound.SND_FILENAME)#。第一个参数是文件的完备路径,第二个是播放的标记,winsound.SND_FILENAME代表的是播放的是文件。

起首咱们导入winsound模块,然后使用这个模块的PlaySound要领播放指定的声音文件如许就实现了。播放直到终了,住手声音的措施是:winsound.PlaySound(None, winsound.SND_PURGE)对于应的是:住手所有声音模块。

默许的声音播放方式是同步的,也就是说播放声音的时辰步伐啥也不克不及干,如图4播放的5分钟音频:

假如这五分钟的音频sound.wav没有播放终了,步伐啥也不克不及干,尬不尬。这个积木块比力蛮横,要求必需等它做完怎样实现异步播放声音呢,究竟咱们是热爱时间的好少年。

这里要用到的是同步标记winsound.SND_ASYNC(图5),虽然一样是5分钟的音频,但是后面的语句很较着的履行了。

找到了与这三个积木块对于应的winsound语句,实现TSound类image.png(图6),import winsound as snd。

起首导入winsound模块并重定名为snd(图7),然后生命TSound类,界说三个函数,实现播放,播放直到及住手所有声音的功效,固然这也仅仅是个实现罢了,要真的完美还有是需要比力长的时间,只是给各人简朴的举个例子,这个实在可以比照register_shape及shape函数来界说及完美的。

将TSound添加到Turtle的函数列表

让RawTurtle继续TSound类(图8),将TSound的要领添加到Turtle的函数列表,添加TSound的要领到turtle的函数列表,然后再RawTurtle中初始化一下TSound,把修改后的文件重定名为pycat,然后导入并运行。

留意,用IDLE新建,一个sound.py文件,然后生存于d:\coding\yaohao目次下,导入同目次下的pycat(图9),假如你的python文件及pycat不于统一目次,是没法导入pycat的。

末了,播放声音,住手播放声音,年夜功告成。

-YABO鸭脖官网