PythonIDE Docs
中文
简体中文

font_picker

系统字体选择器。

系统字体选择器:弹出 UIFontPickerViewController,返回用户选中的字体信息。

边界pick()阻塞脚本直到用户完成或取消(与 dialogs 类似)。只能放在按钮回调里,不要在 body() 或模块导入时调用。不需要额外权限。

#模块概览

说明
导入import font_picker
适合做什么主题设置、笔记 App 选字体、设计工具
调用时机用户点击按钮后调用 pick()
推荐顺序按钮回调 → pick() → 判空 → 写入 State
取消处理用户取消返回 None

#快速开始

下面脚本弹出字体选择器并打印结果:

python
import font_picker

try:
    font = font_picker.pick()
    if font is None:
        print("用户取消")
    else:
        print(font["family"], font["name"], font.get("point_size"))
except font_picker.FontPickerError as exc:
    print("字体选择失败:", exc, f"code={exc.code}")

#AppUI 示例

pick() 放在按钮回调;结果写回 State 并用 Text 预览字体名。

python
import appui
import font_picker

state = appui.State(
    family="—",
    name="—",
    size="—",
    status="点击按钮选择字体",
)


def choose_font():
    try:
        font = font_picker.pick()
        if font is None:
            state.batch_update(
                family="—",
                name="—",
                size="—",
                status="用户取消选择",
            )
            return

        state.batch_update(
            family=font.get("family", "—"),
            name=font.get("name", "—"),
            size=str(font.get("point_size", "—")),
            status="已选择字体",
        )
    except font_picker.FontPickerError as exc:
        state.status = f"选择失败: {exc}"


def body():
    return appui.NavigationStack(
        appui.Form([
            appui.Section("当前字体", [
                appui.LabeledContent("族名", value=state.family),
                appui.LabeledContent("字体名", value=state.name),
                appui.LabeledContent("字号", value=state.size),
                appui.Text(state.name)
                .font("title2")
                .foreground_color("label"),
            ]),
            appui.Section("操作", [
                appui.Button("选择字体", action=choose_font)
                .button_style("bordered_prominent"),
                appui.Text(state.status).foreground_color("secondaryLabel"),
            ], footer="pick() 会阻塞直到用户完成;请在按钮回调中调用。"),
        ]).navigation_title("字体")
    )


appui.run(body, state=state)

#API 参考

#速查

API作用
pick()弹出系统字体选择器 → 字体字典 / None
FontPickerErrorBridge 不可用或调用失败

#pick()

pick() -> dict | None

python
font = font_picker.pick()

成功时返回字典:

字段说明
family字体族名,如 PingFang SC
namePostScript 字体名
point_size选择器中的参考字号(默认约 17)

用户取消时返回 None

#异常

Bridge 不可用时抛出 FontPickerError

python
try:
    font = font_picker.pick()
except font_picker.FontPickerError as exc:
    print(exc.code)

#常见错误

错误写法后果修正
body()pick()每次刷新都弹选择器放进按钮回调
不判断 None用户取消后访问键崩溃if font is None: return
onAppear 自动 pick()页面一打开就阻塞等用户点击
point_size 当最终 UI 字号可能与你的布局不一致自行设定 appui.Text(...).font(...)

#相关文档

文档用途
dialogs其他阻塞式系统面板
AppUI 控件参考Text 字体修饰符
原生能力入口MiniApp 场景配方

#预期效果

运行示例后,界面应出现文档描述的目标结果;若与预期不符,先看「失败路径」并按返回值或日志排查。