-
Notifications
You must be signed in to change notification settings - Fork 1
3. 界面控制
Aues6uen11Z edited this page Oct 25, 2024
·
1 revision
对于一些界面很固定的程序,可以把它的所有页面都记录下来,同时设置好不同界面之间的跳转关系,这样就可以从任意界面启动Zafkiel程序,并且自动选择最短路径导航前往任意其他界面。
具体来说,就是通过一个在界面独一无二的模板图来标识该界面,再通过一个按钮模板图来标识目的界面。
from zafkiel.ui import Page
page_chat = Page(Template(r"chat_flag.png", (-0.474, -0.249)))
page_contacts = Page(Template(r"contacts_flag.png", (-0.473, -0.209)))
# 点击contacts_goto_chat模板对应位置,前往page_chat
page_contacts.link(Template(r"contacts_goto_chat.png", (-0.473, -0.249)),
destination=page_chat)
# 点击chat_goto_contacts模板对应位置,前往page_contacts
page_chat.link(Template(r"chat_goto_contacts.png", (-0.475, -0.211)),
destination=page_contacts)
多选标签页
| [Daily] | Urgent | -> click -> | Daily | [Urgent] |
或开关
| [ON] | -> click -> | [OFF] |
在某些场景很常见,虽然可能也有办法使用Page
类完成相应逻辑,但有些混淆。这种情况下可以使用Switch
类,同样需要一个标识和一个跳转模板图,需要注意的是state
必须和check_button
的文件名一致。
from zafkiel.ui import Switch
# 定义一个Switch,is_selector表示是多选
switch_demo = Switch('switch_demo', is_selector=True)
# 添加状态,TPL_XXX表示Template对象
switch_demo.add_state(state='DAILY_TAB', # 必须为TPL_DAILY_TAB.name
check_button=TPL_DAILY_TAB,
click_button=TPL_GOTO_URGENT)
switch_demo.add_state(state='URGENT_TAB',
check_button=TPL_URGENT_TAB,
click_button=TPL_GOTO_DAILY)
设定好页面和开关后,可以UI
类来进行界面控制,例如
from zafkiel.ui import UI
qq_ui = UI()
# 确保当前界面位于page_chat
qq_ui.ui_ensure(page_chat)
# 跳转到page_contacts
qq_ui.ui_goto(page_contacts)
# 获取当前页面
qq_ui.ui_get_current_page()
# 假如page_chat有一个switch_demo,可以跳转到DAILY_TAB状态,ui_ensure同理
qq_ui.ui_goto(page_chat, TPL_DAILY_TAB)
# 获取当前开关状态
qq_ui.ui_get_current_state(switch_demo)
有时页面切换过程中会遇到不可预测的弹窗,如果已经确定可能的弹窗类型,只是不知道弹出的时机,可以提前使用get_popup_list
注册弹窗处理逻辑,这样在页面跳转时可以自动处理。
def handle_ad0():
处理逻辑
if 处理成功:
return True
return False
qq_ui.get_popup_list([handle_ad0, handle_ad1])
当然,你也可以显式调用弹窗处理
qq_ui.ui_additional()
更多内容请参考源码