设置界面的调用

设置界面不同于主界面,它更像是一个选择器。给用户展示选项,选择,执行。这个章节将简单阐述设置界面的工作原理。

设置页面源代码存储在 TaoLiSystem/page/setting.py 中,详细设置项源代码存储在 TaoLiSystem/page/settingFun.py 中。

设置项的存储

所有设置项在 setting.py 中的 settings 列表中,列表应该会类似如下这样:

# 设置项对应设置
settings = [["无线网络选项", "调整互联网设置", 0, 'wifi_setting'],
            ["日期时间选项", "调整日期时间", 78, 'date_setting'],
            ["掌控板选项", "设定掌控板偏好", 184, 'system_setting']]

列表 settings 各项的小项解释如下:

  • 第一项为设置项名称。

  • 第二项为设置项的简短介绍。

  • 第三项为设置项的图标在 TaoLiSystem/static/setting.bin 中的位置。图标 bin 文件生成 -> 跳转

  • 第四项为设置项在 settingFun.py 中的函数名称,用户长按触摸 P 按键后调用。

备注

设置项图标大小为 32x32 。

界面逻辑

加入设置界面后,设计界面会重新定义按键中断,并记录 main.py 的按键中断。在设置界面到底时,按下 B 键,按键中断还原,并手动调用 B 键中断函数,触发 main.py 的页面切换逻辑。部分代码如下:

# 按钮事件
def button_b_callback(_):
    global setting_id
    if setting_id == 0:
        setting_id = -1
        button_a.event_pressed, button_b.event_pressed = button_a_callback_o, button_b_callback_o  # 还原按钮绑定
        button_b.event_pressed(0)
        return
    setting_id = max(0, setting_id - 1)

在调用设置界面的 show() 函数时,会进入设置页面的自代码循环,直接在 show() 循环不退出了。您会在代码中看到这样一句代码:

_ = setting_id
# 等待按钮事件
while _ == setting_id:   # 改变说明按键中断,改变了 setting_id 的值
    # 其它代码

代码中的 setting_id 是全局变量,在进入循环前,把值赋给了 _ 这个局部变量,然后使用看似“死条件”的 _ == setting_id 来循环。实际上,正是因为 setting_id 是全局变量,而我们又设置了按键中断,当用户按下按键时,程序被中断了,转而去执行按钮事件函数 button_X_callback() (X 代表 a 或 b),在函数中会改变 setting_id 的值,使循环条件不成立跳出循环,转而让 show() 执行结束。在 main.py 再次调用 show() 按照新的 setting_id 绘制新的设置项。

这个写法在插件界面中也有出现。