console
原生弹窗、HUD 和控制台样式。
控制台与原生弹窗:阻塞式 alert / input_alert、HUD 提示、控制台颜色与链接(Pythonista 兼容 API)。
边界:弹窗 API 阻塞调用线程直到用户操作;在 AppUI 中应放在按钮回调。set_color/clear作用于脚本控制台输出,不是 SwiftUI 界面样式。
#模块概览
| 项 | 说明 |
|---|---|
| 导入 | import console |
| 适合做什么 | 快速确认、输入一行文字、登录框、HUD 反馈 |
| 调用时机 | 弹窗放在按钮回调;勿在 body() 自动弹出 |
| 推荐顺序 | 需要输入 → input_alert;仅确认 → alert |
| 取消 | 用户点取消抛 KeyboardInterrupt |
#快速开始
已复制
import console
choice = console.alert("确认", "确定删除这条记录吗?", button1="删除", button2="取消")
if choice == 1:
print("已确认删除")
name = console.input_alert("输入", "你的名字", input_text="")
console.hud_alert("已保存", icon="checkmark", duration=1.5)
控制台样式:
已复制
import console
console.set_color(0.2, 0.6, 1.0)
print("蓝色文字")
console.set_color() # 重置
console.write_link("Python 官网", "https://www.python.org")
#AppUI 示例
弹窗与 HUD 放在按钮回调。
已复制
import appui
import console
state = appui.State(
last_input="—",
last_choice="—",
status="点击按钮体验",
)
def show_alert():
try:
idx = console.alert(
"确认操作",
"这是一个原生 alert 示例",
button1="好的",
button2="算了",
)
state.last_choice = f"按钮 {idx}"
state.status = "alert 已关闭"
except KeyboardInterrupt:
state.status = "用户取消"
def show_input():
try:
text = console.input_alert("输入", "说点什么", input_text="Hello")
state.last_input = text
state.status = "input 已完成"
console.hud_alert("收到", duration=1.2)
except KeyboardInterrupt:
state.status = "输入已取消"
def body():
return appui.NavigationStack(
appui.Form([
appui.Section("弹窗", [
appui.Button("显示 Alert", action=show_alert)
.button_style("bordered_prominent"),
appui.Button("显示 Input", action=show_input),
]),
appui.Section("结果", [
appui.LabeledContent("Alert", value=state.last_choice),
appui.LabeledContent("Input", value=state.last_input),
appui.Text(state.status).foreground_color("secondaryLabel"),
]),
]).navigation_title("控制台弹窗")
)
appui.run(body, state=state)
#API 参考
#速查
| API | 作用 |
|---|---|
alert(title, message, *, button1='OK', ...) | 多按钮弹窗 → 1-based 索引 |
input_alert(title, message, input_text='', ...) | 带输入框 → str |
login_alert(...) | 用户名+密码 → (user, password) |
password_alert(...) | 密码框 → str |
hud_alert(message, icon='', duration=1.5) | 短暂 HUD 提示 |
set_color(r, g, b) / set_font(name, size) | 控制台样式 |
clear() | 清空控制台 |
write_link(title, url) | 输出可点击链接 |
#alert
已复制
idx = console.alert("标题", "正文", button1="确定", button2="取消")
# 1 | 2 | 3;取消抛 KeyboardInterrupt
#input_alert / login_alert / password_alert
已复制
text = console.input_alert("输入", ok_button_title="完成")
user, pw = console.login_alert("登录")
secret = console.password_alert("密码")
原生能力入口不可用时回退到终端 input()。
#常见错误
| 错误写法 | 后果 | 修正 |
|---|---|---|
在 body() 里 alert | 每次刷新弹窗 | 放进按钮回调 |
忽略 KeyboardInterrupt | 取消时崩溃 | try/except KeyboardInterrupt |
用 console 做 AppUI 布局 | API 不匹配 | 用 appui 组件 |
| 主线程长阻塞 | 界面假死 | 弹窗本身会阻塞,避免嵌套多层 |
#相关文档
#预期效果
运行示例后,界面应出现文档描述的目标结果;若与预期不符,先看「失败路径」并按返回值或日志排查。