图像
BiBoPython 在「艺术」方面能做的事,大概就相当于:你只有一块 5×5 的红色 LED 点阵(LED 即发光二极管——就是 micro:bit 正面会亮的小灯),但你可以对这块屏幕做相当精细的控制,做出各种有趣效果。
BiBoPython 自带许多内置图案,可以直接显示。例如让 micro:bit 看起来「开心」:
from bibo import *
display.show(Image.HAPPY)
第一行你应该已经熟悉了。第二行用 display 对象的 show 方法显示一张内置图像。我们要显示的开心脸属于 Image 对象,名叫 HAPPY。把它写在 show 的圆括号里即可。

内置图像一览
Image.HEARTImage.HEART_SMALLImage.HAPPYImage.SMILEImage.SADImage.CONFUSEDImage.ANGRYImage.ASLEEPImage.SURPRISEDImage.SILLYImage.FABULOUSImage.MEHImage.YESImage.NOImage.CLOCK12、Image.CLOCK11、Image.CLOCK10、Image.CLOCK9、Image.CLOCK8、Image.CLOCK7、Image.CLOCK6、Image.CLOCK5、Image.CLOCK4、Image.CLOCK3、Image.CLOCK2、Image.CLOCK1Image.ARROW_N、Image.ARROW_NE、Image.ARROW_E、Image.ARROW_SE、Image.ARROW_S、Image.ARROW_SW、Image.ARROW_W、Image.ARROW_NWImage.TRIANGLEImage.TRIANGLE_LEFTImage.CHESSBOARDImage.DIAMONDImage.DIAMOND_SMALLImage.SQUAREImage.SQUARE_SMALLImage.RABBITImage.COWImage.MUSIC_CROTCHETImage.MUSIC_QUAVERImage.MUSIC_QUAVERSImage.PITCHFORKImage.XMASImage.PACMANImage.TARGETImage.TSHIRTImage.ROLLERSKATEImage.DUCKImage.HOUSEImage.TORTOISEImage.BUTTERFLYImage.STICKFIGUREImage.GHOSTImage.SWORDImage.GIRAFFEImage.SKULLImage.UMBRELLAImage.SNAKEImage.SCISSORS
种类不少!不妨把上面显示 Image.HAPPY 的代码改成列表里的其他内置图像,看看效果。
自制图像
当然,你也想画自己的图案,对吧?这很简单。
物理显示屏上每个 LED 像素可以设为 0 到 9 共十个亮度值。设为 0 表示熄灭(零亮度);设为 9 表示最亮;1 到 8 则是介于熄灭与最亮之间的各级亮度。
知道这些,就可以创建新图像:
from bibo import *
boat = Image("05050:"
"05050:"
"05050:"
"99999:"
"09990")
display.show(boat)
运行后,你会看到一艘老式帆船——桅杆比船身暗一些。
看出怎么「画图」了吗?显示屏的每一行对应一行以 : 结尾、写在双引号 " 里的数字;每个数字表示一个像素的亮度。五行、每行五个数,就能分别指定每个 LED 的亮度——这就是自制图像的方法。简单!
其实不必拆成多行写。若你能记清每行,也可以写成:
boat = Image("05050:05050:05050:99999:09990")
动画
静态图已经很好玩,动起来更有趣。在 BiBoPython 里这同样简单——只要用图像列表!
购物列表示例:
- 鸡蛋
- 培根
- 番茄
在 Python 里可以写成:
shopping = ["Eggs", "Bacon", "Tomatoes"]
我们创建了名为 shopping 的列表,包含三项。Python 知道这是列表,因为用了方括号 [ 和 ];项与项之间用逗号 , 分隔。这里三项都是字符串:"Eggs"、"Bacon"、"Tomatoes"(字符串用双引号包住)。
列表里可以存各种类型。例如数字列表:
primes = [2, 3, 5, 7, 11, 13, 17, 19]
甚至可以在同一个列表里放不同类型:
mixed_up_list = ["hello!", 1.234, Image.HAPPY]
最后一项是图像!
我们可以让 BiBoPython 播放图像列表动画。内置了两组图像列表:Image.ALL_CLOCKS 和 Image.ALL_ARROWS:
from bibo import *
display.show(Image.ALL_CLOCKS, loop=True, delay=100)
和单张图像一样,用 display.show 显示。这里传入 Image.ALL_CLOCKS,BiBoPython 会依次显示列表中的每一张图。loop=True 表示循环播放;delay=100 表示每张图之间间隔 100 毫秒(十分之一秒)。
你能用 Image.ALL_ARROWS 做动画吗?怎样让它只播一遍而不无限循环?(提示:True 的反面是 False;loop 默认是 False。)能否改变动画速度?
最后,自制动画示例——让帆船沉入屏幕底部:
from bibo import *
boat1 = Image("05050:"
"05050:"
"05050:"
"99999:"
"09990")
boat2 = Image("00000:"
"05050:"
"05050:"
"05050:"
"99999")
boat3 = Image("00000:"
"00000:"
"05050:"
"05050:"
"05050")
boat4 = Image("00000:"
"00000:"
"00000:"
"05050:"
"05050")
boat5 = Image("00000:"
"00000:"
"00000:"
"00000:"
"05050")
boat6 = Image("00000:"
"00000:"
"00000:"
"00000:"
"00000")
all_boats = [boat1, boat2, boat3, boat4, boat5, boat6]
display.show(all_boats, delay=200)
代码思路:
- 用前面相同的方式创建六张
boat图像。 - 把它们放进列表
all_boats。 - 调用
display.show播放动画,间隔 200 毫秒。 - 没有设置
loop=True,所以船只会沉一次——从科学角度说,这很合理。:-)
你想动画什么?能做渐隐再渐亮的效果吗?试试看!