日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

让小乌龟可以唱歌——对Python turtle进行拓展

發(fā)布時間:2025/7/14 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 让小乌龟可以唱歌——对Python turtle进行拓展 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在Scratch中,小貓是可以唱歌的,而且Scratch的聲音木塊有著豐富的功能,在這方面Python turtle略有欠缺,今天我們就來完善一下.

Python聲音模塊

Python處理聲音的模塊很多,但是我們要實現(xiàn)的功能并不復雜,所以只需要用到winsound這個系統(tǒng)自帶的模塊就好了.我們要的只是實現(xiàn)類似scratch的功能,用不到很復雜的功能的,當然Python能夠做的比scratch多多了.

Python turtle的代碼結構

最近一直在閱讀python turtle的源代碼對于Python源代碼的結構有所了解,針對造型的操作也重新定義了一些函數(shù)來與scratch的積木塊相對應。

在Python turtle基礎上進行擴充而不是使用Pygame、Pyglet等復雜的庫是因為Python turtle本身為了教小孩子編程設計的,在結構上更加符合小孩子的學習習慣,對交互式編程友好,而pygame和pyglet不具備這兩個特點。

class RawTurtle(TPen, TNavigator):# 小烏龜?shù)膭赢嫴糠? 為何添加的函數(shù)不工作呢"""Animation part of the RawTurtle.Puts RawTurtle upon a TurtleScreen and provides tools forits animation."""

其中核心的turtle繼承自RawTurtle類,而RawTurtle繼承自TPen和TNavigator,兩個類分別控制畫筆的繪制和移動,簡單的來說TPen承載的是類似Scratch中畫筆積木類的功能,而TNavigator更多的承載了動作積木類的功能。

上面兩組功能是否很相似呢。

所以要實現(xiàn)Python turtle的聲音功能,只要重新寫一個聲音相關的類,然后讓RawTurtle繼承這個聲音類就ok了,當然還要注意一個問題,turtle所有的類都要加入到_tg_turtle_functions這個列表中,這個列表保存了turtle所有的方法,用來保證在交互式命令行里,默認turtle的各種方法可以直接作為函數(shù)調用.

讓我們開工把

實現(xiàn)TSound類

Scratch積木塊對應的Python

我們一步步的來實現(xiàn)

對winsound模塊的同學,可以訪問其在官方的文檔,這里介紹播放聲音的方法:

winsound.PlaySound('d:\coding\maow.wav',winsound.SND_FILENAME) # 第一個參數(shù)是文件的完整路徑,第二個是播放的標志,winsound.SND_FILENAME代表的是播放的是文件

首先我們導入winsound模塊之后,然后利用這個模塊的PlaySound方法播放指定的聲音文件這樣就實現(xiàn)了

停止聲音的辦法是:

winsound.PlaySound(None, winsound.SND_PURGE)

對應的是

默認的聲音播放方式是同步的,也就是說播放聲音的時候程序啥也不能干,如下面播放5分鐘的音頻:

import winsound as s s.PlaySound("d:\coding\sound.wav",s.SND_FILENAME) print('Playing ended!')

如果這五分鐘的音頻sound.wav沒有播放完畢,程序啥也不能干,尬不尬.

這個積木塊比較霸道,要求必須等他做完了才可以,本來就相當于你跟你女朋友打電話,一般我是邊打電話邊做事情,但是女朋友呢非得要求你啥也不能做,直到電話打完,不然就是不尊重她,不愛她,真尬.當然了少年們,跟女朋友打電話的時候一定不要做別的事情哦.

如何實現(xiàn)異步播放聲音呢,畢竟我們是熱愛時間的好少年.


這里要用到的是同步標志winsound.SND_ASYNC


雖然同樣是5分鐘的音頻,可是后面的語句很明顯的執(zhí)行了.

實現(xiàn)TSound類

import winsound as snd # 導入聲音類class TSound(object):"""Sounding part of the RawTurtleImplements sounding methods"""def __init__(self, soundfile, resizemode=_CFG["resizemode"]):# 其實Sound并不涉及畫筆的移動和繪制,resizemode不加也是可以滴self._soundfile = soundfiledef play(self, soundfile):snd.PlaySound("d:\coding\sound.wav", snd.SND_ASYNC)def playuntil(self, soundfile):snd.PlaySound("d:\coding\sound.wav", snd.SND_FILENAME)def stopall(self):snd.PlaySound(None, snd.SND_PURGE)

首先導入winsound模塊并重命名為snd,然后生命TSound類,定義三個函數(shù),實現(xiàn)播放,播放直到和停止所有聲音的功能,當然這也僅僅是個實現(xiàn)而已,要真的完善還是需要比較長的時間,只是給大家簡單的舉個例子,這個其實可以對照register_shape和shape函數(shù)來定義和完善的.

讓RawTurtle繼承TSound類

class RawTurtle(TPen, TNavigator, TSound):# 小烏龜?shù)膭赢嫴糠? 為何添加的函數(shù)不工作呢"""Animation part of the RawTurtle.Puts RawTurtle upon a TurtleScreen and provides tools forits animation."""

將TSound的方法添加到Turtle的函數(shù)列表

我把修改后的文件重命名為pycat,然后導入:


注意我用IDLE新建了一個sound.py文件然后保存在d:\coding\yaohao目錄下,然后導入同目錄下的pycat,如果你的python文件和pycat不在同一目錄,是無法導入pycat的

轉載于:https://www.cnblogs.com/asworm/p/7045486.html

《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的让小乌龟可以唱歌——对Python turtle进行拓展的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。