sysgui – 系统 GUI 模块

sysgui 模块源代码在文件夹 TaoLiSystem/core/sysgui.py 下,用于系统的GUI绘制。

备注

这个模块不依附于系统存在,可以单独提取使用。唯一依赖的变量是 touchPad_sensitivity 可以手动设置为全局变量然后提取。

重要

2024.7.18 修复了在文字输入页面按下 O 键无效的问题,感谢 我叫罗米奇 的修正,并在文字输入页面增加了几个可以输入的字符。

函数

sysgui.draw_string_from_bin(x, y, fp, string[, r])

用于方便将 bin2picture.py 生成的字体图片文件直接绘制成文字。图标 bin 文件生成 -> 跳转

  • x – 绘制的 x 坐标

  • y – 绘制的 y 坐标

  • fp – 图标 bin 文件打开的IO对象

  • string – 要绘制的文字

  • r – 用于定位的图片点,是一个字典,如果不提供则遍历 bin 文件查找。

sysgui.draw_string_center(text, y[, mode, ex])

用于将文字水平居中绘制在屏幕中。

  • text – 要绘制的文字

  • y – 绘制的 y 坐标

  • mode – 文字绘制的方式,默认为 TextMode.normal,此参数移步 oled.DispChar()

  • ex – 从中间位置向上平移,默认为 False ,如果为 True,则文字会从屏幕中间向上平移 y 参数个像素。

sysgui.draw_rect_empty(x1, y1, x2, y2[, function, no_fill])

绘制一个空框,描边是 1 像素的白色线条,填充是黑色。

  • x1 – 起始(左上角)的 x 坐标

  • y1 – 起始(左上角)的 y 坐标

  • x2 – 结束(右下角)的 x 坐标

  • y2 – 结束(右下角)的 y 坐标

  • function – 画填充之后,画边框之前执行的函数,默认无。

  • no_fill – 不填充直接画边框。默认 False 。

sysgui.get_character_width(s)

获取输入字符串的总宽度(掌控板自带字体的宽度),返回字符串总宽度。

  • s – 需要获取字符宽度的字符串

sysgui.selectionBox(items[, selected_id])

启动一个选择器,让用户全屏选择。返回用户选择的项在 items 下标。操作方法查看 全屏选择页面 介绍。

  • items – 要给用户选择的物品列表

  • selected_id – 默认选择项,默认为 0 ,就是第一项。 如果用户取消选择,则返回None。


../_images/core_sysgui_selectionBox.png

使用示例:

>>> from TaoLiSystem.core import sysgui
>>> sysgui.selectionBox(["皮卡丘\n居住在皮卡丘山", "皮卡丘\n居住在森林"])
0  # 按下 A 键后
sysgui.itemSelector(title, items[, selected_id])

启动一个选择器,让用户选择栏目。返回用户选择的项在 items 下标。操作方法查看 物品选择页面 介绍。

  • title – 选择器标题

  • items – 要给用户选择的物品列表

  • selected_id – 默认选择项,默认为 0 ,就是第一项。 如果用户取消选择,则返回None。


../_images/core_sysgui_itemSelector.png

使用示例:

>>> from TaoLiSystem.core import sysgui
>>> sysgui.itemSelector("给皮卡丘买?", ["苹果", "香蕉", "番茄酱"])
2  # 按下 A 键后
sysgui.messageBox(content[, yes_text, no_text, button_line, content_fun])

显示一个消息框,给用户选择。返回 True/False,用户按下 A 键时返回 True,按下 B 键返回 False。

  • content – 消息的内容

  • yes_text – 可选参数,确认按钮的提示,默认为 “好的”

  • no_text – 可选参数,取消按钮的提示,默认为空,不显示

  • button_line – 可选参数,默认为 False,是否将确认与取消按钮分行显示

  • content_fun – 可选参数,默认为 None,如果传入一个函数将会在绘制时采用此函数绘制,仅提供按钮事件的返回


../_images/core_sysgui_messageBox.png

使用示例:

>>> from TaoLiSystem.core import sysgui
>>> sysgui.messageBox("皮卡丘是不是\n很可爱呢?", yes_text="是的", no_text="对啊")
True  # 按下 A 键后
sysgui.tipBox(content[, t])

显示一个提示框,提示用户。

  • content – 提示的内容

  • t – 显示的时间,单位秒,默认3秒


../_images/core_sysgui_tipBox.png

使用示例:

>>> from TaoLiSystem.core import sysgui
>>> sysgui.tipBox("(*^▽^*)", 2)
sysgui.txtReader_DispChar(s[, x, y, mode, auto_return, screen_width, screen_height, dispchar])

用于换行显示文字在屏幕上,是一个过程函数,被 txtStreamReader 调用。在文字占满屏幕时会直接跳出循环。在未填满屏幕时不返回,跳出循环后返回多出的一个字符。

  • s – 显示的文字

  • x – 显示的横坐标位置,默认为 0

  • y – 显示的纵坐标位置,默认为 0

  • mode – 文字绘制的方式,默认为 TextMode.normal

  • auto_return – 是否自动换行,默认为 True

  • screen_width – 屏幕宽度,默认为掌控板 oled 宽度。

  • screen_height – 屏幕高度,默认为掌控板 oled 高度。

  • dispchar – 是否显示文字,默认为 True ,将会绘制文字。如果为 False ,只会遍历文字。

sysgui.txtStreamReader(stringIO, title[, bookmarks, screen_width, screen_height, disp_function])

实现文本流阅读。操作方法查看 文本读取页面 介绍。

  • stringIO – 文本IO或者文件IO对象

  • title – 阅读标题

  • bookmarks – 书签类别,默认是全局书签。书签列表每个项是一个小列表,形如 [“书签1”, 0],第一项为书签名称,第二项为书签位置。

  • screen_width – 屏幕宽度,默认为 oled 屏幕宽度 + 8,一行大概可以塞满中文字。

  • screen_height – 屏幕高度,默认为 oled 屏幕高度。

  • disp_function – 显示函数,默认为 txtReader_DispChar


../_images/core_sysgui_txt1.png

使用示例1:

>>> from TaoLiSystem.core import sysgui
>>> f = open("pikachu.txt", "r")
>>> sysgui.txtStreamReader(f, "皮卡丘介绍", [])
>>> f.close()

../_images/core_sysgui_txt2.png

使用示例2:

>>> from TaoLiSystem.core import sysgui
>>> import uio
>>> sio = uio.StringIO("皮卡丘是栖息在森林中的宝可梦,在森林里和同伴们一起生活。它们把尾巴贴在一起交换电流,其实是在互相打招呼。有时会对虚弱的同伴施以电流和电击,把自己的精力分给同伴。它性情聪慧,会用电去电击它第一次看到的东西,将生硬的果实用电击烤软后再吃。")
>>> sysgui.txtStreamReader(sio, "皮卡丘介绍", [])
>>> sio.close()
sysgui.textTypeBox([text, all_text, input_callback])

打开一个输入页面,提示用户输入。返回用户输入的字符串。操作方法查看 文字输入页面 介绍。

  • text – 默认的输入文本,默认为空

  • all_text – 所有字组列表,默认为 ["0123456789", "abcdef", "ghijkl", "mnopqr", "stuvwx", "yz", ".?!=;:*"]

  • input_callback – 输入文字回调函数,默认采用默认函数。此函数应该有三个参数:
    • origin_text – 已经输入的文本

    • input_text – 用户新选择的文本

    • text_pos – 目前光标位置

    • 返回值要求:返回一个元组,第一个项为输入后的文本,第二项为光标位置

使用示例:

>>> from TaoLiSystem.core import sysgui
>>> sysgui.textTypeBox()
'Pikachu!'  # 输入后返回