快捷指令启动器
运行快捷指令、打开 URL、系统设置入口和复制链接。
演示 shortcuts.run_shortcut、open_url、open_settings 与自动化入口列表。
#预期效果
运行后会出现快捷指令启动器,运行快捷指令、打开 URL、复制链接和状态反馈都在列表中完成。
#完整示例
已复制
import appui
import clipboard
import haptics
import shortcuts
state = appui.State(
shortcut_name="",
url="https://apple.com",
status="等待操作",
entries=[
{"title": "打开 Apple", "url": "https://apple.com", "icon": "safari.fill"},
{"title": "打开 Pythonista Scheme", "url": "pythonista://", "icon": "terminal.fill"},
{
"title": "复制快捷指令库链接",
"url": "https://www.icloud.com/shortcuts/",
"icon": "doc.on.doc.fill",
},
],
)
def set_shortcut_name(value):
state.shortcut_name = value
def set_url(value):
state.url = value
def run_named_shortcut():
name = state.shortcut_name.strip()
if not name:
state.status = "请输入快捷指令名称"
haptics.notification("warning")
return
ok = shortcuts.run_shortcut(name)
state.status = f"已发起:{name}" if ok else f"无法运行:{name}"
haptics.notification("success" if ok else "error")
def open_current_url():
url = state.url.strip()
if not url:
state.status = "请输入 URL"
haptics.notification("warning")
return
ok = shortcuts.open_url(url)
state.status = f"已打开:{url}" if ok else f"无法打开:{url}"
haptics.notification("success" if ok else "error")
def open_settings():
ok = shortcuts.open_settings()
state.status = "已打开系统设置" if ok else "无法打开系统设置"
def copy_url(url):
clipboard.set(url)
state.status = "已复制链接"
haptics.selection()
def entry_row(item):
def open_current():
shortcuts.open_url(item["url"])
def copy_current():
copy_url(item["url"])
return appui.HStack(
[
appui.Image(system_name=item["icon"]).foreground_color("systemBlue"),
appui.VStack(
[
appui.Text(item["title"]).font("headline"),
appui.Text(item["url"]).font("caption").foreground_color("secondaryLabel"),
],
alignment="leading",
),
appui.Spacer(),
appui.Button("打开", action=open_current),
appui.Button("复制", action=copy_current),
],
spacing=10,
)
def entry_key(item):
return item["url"]
def body():
return appui.NavigationStack(
appui.List(
[
appui.Section(
[
appui.TextField(
"快捷指令名称",
text=state.shortcut_name,
on_change=set_shortcut_name,
),
appui.Button("运行快捷指令", action=run_named_shortcut)
.button_style("bordered_prominent"),
],
header="快捷指令",
),
appui.Section(
[
appui.TextField("URL 或 Scheme", text=state.url, on_change=set_url),
appui.Button("打开 URL", action=open_current_url),
appui.Button("打开当前 App 设置", action=open_settings),
],
header="系统入口",
),
appui.Section(
[appui.ForEach(state.entries, entry_row, key=entry_key)],
header="自动化入口",
),
appui.Section(
[appui.LabeledContent("状态", value=state.status)],
header="结果",
),
]
).navigation_title("自动化")
)
appui.run(body, state=state, presentation="sheet")
#关键技巧
run_shortcut只负责拉起快捷指令,不返回快捷指令的执行结果。open_url/open_settings放在按钮回调里,勿在body()构建时调用。- 用户输入的 URL 先
strip再打开。