返回介绍

GUI Reference

发布于 2020-03-05 18:21:28 字数 6157 浏览 1253 评论 0 收藏 0

AutoIt 脚本可创建(由窗口及其控件组成的)简单的图形用户界面(GUI)。

GUI 的概念

GUI 可由一个或多个 窗口 组成,这些窗口又带有一个或多个控件。GUI是靠“事件驱动”实现与用户的交互的,比如像点击按钮这样的动作就会引发一个事件。程序在空闲状态时等待事件的发生,捕捉到事件时则根据事件执行相关操作。您可以猜想自己在门边等邮差(一直坐在那儿直到有信被送进来为止),等邮差把信送来了,您就要阅读该信并决定下一步做什么,这就跟GUI的原理一样了:您等待的是邮差,而GUI则等待事件,

当然,在GUI(指程序的界面)运行时您也可以选择要做的其它任务,比如使用GUI函数创建一个自动更新的动态的进度条,同时还可执行其它复杂的任务。

GUI 的控件

所有用户应该都对控件非常了解了,在窗口上能被点击或进行其它交互的部分都是控件的一种。AutoIt 可创建的控件类型有如下几种(您肯定已在其它Windows程序中见过它们了):

  • Label
  • 纯文字控件
  • Button
  • 按钮
  • Input
  • 单行编辑框,可供输入文字
  • Edit
  • 多行编辑框,可供输入文字
  • Checkbox
  • 方框按钮,可被选中或取消选中
  • Radio
  • 圆形按钮(通常几个一组,每次只能激活/选中其中一个)
  • Combo
  • 组合框,带有下拉列表
  • List
  • 列表框
  • Date
  • 日期选择
  • Pic
  • 图片
  • Icon
  • 图标
  • Progress
  • 进度条
  • Tab
  • 标签,每个标器都可包含一组控件
  • UpDown
  • 可附加到输入型控件上
  • Avi
  • 显示 AVI 格式的剪辑
  • Menu
  • 位于窗口顶部的菜单
  • ContextMenu
  • 当在窗口上点击右键时出现的菜单
  • TreeView
  • 类似于Windows的资源管理器(树型视图)
  • Slider
  • 类似于Windows的音量控件(滑动条)
  • ListView
  • 按列显示信息的控件(列表视图)
  • ListViewItem
  • ListView控件的项目
  • Dummy
  • 虚拟的用户控件

    下面是一个单窗口的GUI示例,它包含了许多被AutoIt支持的控件。从中我们可以看到 AutoIt 确实可以创建内容非常丰富的GUI!

    使用 GUICtrlCreate... 等函数即可创建控件。在创建时函数会返回 控件ID。关于控件ID有几个注意事项:

  • 控件ID是一个正数(意即该数大于0)
  • 每个控件ID都具有唯一性(即使有多个窗口存在)。
  • 控件ID可通过 AutoIt Window Info 获得。
  • GUI 基本函数

    下面这些就是可用于创建GUI的函数。但这些都是比较初级的应用,如果您已经准备好创建更高级的GUI,则还有其它高级的函数。

    函数解释
    GUICreate创建一个窗口。
    GUICtrlCreate...创建各种控件。
    GUISetState显示或隐藏窗口。
    GUIGetMsg通知GUI检测是否有事件发生(仅用于消息循环)。
    GUICtrlRead读取控件数据。
    GUICtrlSetData设置/更改 控件的数据。
    GUICtrlSet...对控件进行各种属性设置(颜色、风格等等)。

    在您着手编写任何GUI脚本之前别忘了先包含文件 GUIConstants.au3 到脚本开头位置(该文件包含了在编写GUI程序时要用到的所有变量和常量)。

    让我们先来创建一个窗口吧,把它命名为“您好”,设置其长宽分别为200和100个象素。当窗口被创建时它是被隐藏的,所以我们还要先把它给“show(显示)”出来。

    #include <GUIConstants.au3>

    GUICreate("您好", 200, 100)
    GUISetState(@SW_SHOW)
    Sleep(2000)

    如果运行上面的脚本您会看到出现一个窗口并在两秒后消失。看来还不是很有意思哦...那让我们尝试增加一些文字和一个确定按钮到窗口上吧!我们把文字加到 30, 10 这个位置并把按钮放到 70, 50 这个位置,按钮宽度设为60个象素。

    #include <GUIConstants.au3>

    GUICreate("您好", 200, 100)
    GUICtrlCreateLabel("最近过得怎样?", 30, 10)
    GUICtrlCreateButton("还OK吧", 70, 50, 60)
    GUISetState(@SW_SHOW)
    Sleep(2000)

    好,现在看来还不错。但是怎样使这个GUI能响应我们点击按钮的事件呢?这时我们必须先决定究竟如何处理事件:要么通过 消息循环(MessageLoop) 要么通过 OnEvent 函数。

    GUI 事件模式

    正如上面所提到的那样,我们有两种基本的GUI模式:消息循环(MessageLoop)模式和 OnEvent 模式。这两种模式是响应GUI事件的不同的实现方式。具体选择哪一种模式主要看您的 个人喜好 或者您想要创建的GUI类型。这两种模式都能用于创建任何您想要的GUI,只不过某些时候使用其中一个会比另外一个要好用些。

    消息循环是默认的模式。若要切换为 OnEvent 模式请使用 Opt("GUIOnEventMode", 1) 语句。

    消息循环模式(默认)

    在消息循环模式下,脚本大部分时间都在执行一个周期非常短的循环,这个循环通知GUI使用 GUIGetMsg (截获消息)函数。当某个事件发生时 GUIGetMsg 函数把消息作为返回数值返回(比如某个按钮被按下、GUI被关闭,等等)。

    在此模式下,只有当我们频繁地使用 GUIGetMsg 函数时才有可能接收到事件,因此您必须确保在每一秒内都有数次调用该函数,否则您的 GUI 将无法响应事件。

    这一模式最适合用于那些以 GUI 为重点的脚本中,并且您最关心的就是等待用户事件。

    如需了解关于 消息循环模式 的更详细的解释请到 此页 查看。

    OnEvent 模式

    在OnEvent模式下,脚本并不需要频繁地要求GUI检查是否有任何事件发生(并根据返回信息处理事件),而是仅当某个事件发生时GUI才临时性暂停脚本并调用一个用户预定义的函数来处理该事件。例如,假定用户点击了按钮1则GUI将暂停主脚本并调用某个预定义的用户函数来处理按钮1事件。当该函数完成处理操作后才回到主脚本继续执行。这个模式比较类似 Visual Basic 的窗体方法。

    这一模式最适合用于那些 GUI 处于第二重要地位的脚本中,并且您的脚本需要优先执行其它任务。

    如需了解关于 OnEvent模式 的更详细的解释请到 此页 查看。

    如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

    扫码二维码加入Web技术交流群

    发布评论

    需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
    列表为空,暂无数据
      我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
      原文