Skip to content

3. 界面控制

Aues6uen11Z edited this page Oct 25, 2024 · 1 revision

Page

对于一些界面很固定的程序,可以把它的所有页面都记录下来,同时设置好不同界面之间的跳转关系,这样就可以从任意界面启动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)

Switch

多选标签页

| [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

设定好页面和开关后,可以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()

更多内容请参考源码

Clone this wiki locally