QPython 中文文档 下载 App

QSL4A Toast 与 Dialog——Python 弹窗和对话框 API

导入和初始化

所有 QSL4A API 的使用都从创建一个 Android 实例开始:

from androidhelper import Android
droid = Android()

droid 对象是后续所有 Android API 调用的入口。需要确保相关权限已授予(如弹窗需要悬浮窗权限)。

Toast 短暂提示

Toast 是 Android 上最常用的轻量级提示——屏幕底部弹出一个灰色小条,显示文字,几秒后自动消失。不需要用户操作。

droid.makeToast("任务完成!")

支持短消息,不适合长文本。这是 QSL4A 中最简单也最常用的 API 之一——运行状态更新、调试信息输出都可以用。

AlertDialog 确认对话框

弹出一个带标题、消息内容和「确定」「取消」按钮的对话框,等待用户点击:

result = droid.dialogCreateAlert("确认", "确定要删除吗?")
droid.dialogSetPositiveButtonText("确定")
droid.dialogSetNegativeButtonText("取消")
droid.dialogShow()
response = droid.dialogGetResponse().result
if response.get("which") == "positive":
    # 用户点了确定
    print("用户确认了")
else:
    print("用户取消了")

输入对话框

弹出一个带输入框的对话框,让用户输入文字:

droid.dialogCreateInput("输入标题", "请输入内容", "默认文字")
droid.dialogSetPositiveButtonText("提交")
droid.dialogSetNegativeButtonText("取消")
droid.dialogShow()
response = droid.dialogGetResponse().result
if response.get("which") == "positive":
    user_input = response.get("value")
    print(f"用户输入了: {user_input}")

选择列表对话框

弹出一个列表,让用户从多个选项中选择:

options = ["选项一", "选项二", "选项三"]
droid.dialogCreateAlert("请选择")
droid.dialogSetItems(options)
droid.dialogShow()
response = droid.dialogGetResponse().result
selected_index = response.get("item")
print(f"用户选了第 {selected_index} 项")

等待用户操作

QSL4A 的对话框 API 很多有阻塞特性——调用 droid.dialogShow() 后脚本会暂停,直到用户点了某个按钮或选项,脚本才继续往下执行。这是个很好的设计——让异步的 Android UI 和同步的 Python 代码自然融合。

如果不希望阻塞(比如脚本后台跑的时候弹窗),可以用 droid.dialogShow() 后脚本继续执行,在需要时再去读 droid.dialogGetResponse() 的结果。

权限需求总结

API需要的权限
makeToast无特殊权限(QPython App 本身即可弹窗)
dialogCreateAlert 系列悬浮窗权限(SYSTEM_ALERT_WINDOW)

如果对话框弹不出来(静默失败),99% 是没给悬浮窗权限。回系统设置 → QPython → 权限 → 悬浮窗,开启即可。

和 Python 传统 UI 的区别

特性tkinter / PyQt(PC)QSL4A Dialog
运行环境独立 GUI 窗口Android 原生对话框(在 QPython App 内)
开发复杂度需要写窗口、布局、事件处理几个 API 调用搞定
和 Android 融合不融合原生外观、原生行为
适合场景完整桌面应用脚本运行时的轻量交互

小结

Toast 和 Dialog 是 QSL4A 中最常用的 UI API——几行代码就能实现和用户的交互反馈。核心注意点是悬浮窗权限必须授予,否则对话框会静默失败。Toast 最方便,确认对话框和输入对话框适合需要用户做选择的场景。

继续看 传感器访问 了解如何用 Python 读取加速度计、陀螺仪、GPS 等硬件数据。