系统相关和图形界面.ppt_第1页
系统相关和图形界面.ppt_第2页
系统相关和图形界面.ppt_第3页
系统相关和图形界面.ppt_第4页
系统相关和图形界面.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章 系统相关和图形界面,对于系统管理员而言,可能每天都会需要与脚本打交道,有时是为了简单的诸如自动备份和恢复系统的任务,有时是因为需要自动完成很复杂且不断重复性的工作,例如周期性的检测和释放磁盘空间,存储24小时内的所有系统设置的改动等。脚本语言没有繁冗的语法限制,能够快速地开发和执行,即写即用,而且与操作系统结合非常紧密,其实最初就是为了协助系统管理员而诞生的。Ruby作为一门新兴的动态脚本语言,很好地继承了前辈在系统管理方面的优势。在本章中将会全面介绍Ruby在系统方面的技术和技巧。另外在本章的后半部分还将介绍如何使用Ruby创建图形界面(GUI)。,9.1 运行外部程序,运行外部程序,是与外部系统交互的一种方式,也是系统操作最基础的功能之一。Ruby提供了多种运行外部程序的方式。 (1)第一种方式是使用%x方法,它可以执行外部命令或程序,运行时,会一直等待程序运行结束然后再继续执行后面的代码,运行完毕后会将程序输出的结果以字符串形式返回。例如: list = %x(dir) (2)另外一种方式是使用system方法,很多语言中都有同名的方法,它通过一定的内部机制执行指定的命令。例如: system(“notepad”) #打开记事本 system(“dir c:”) #显示c:下的目录文件,9.2 编写命令行程序和ARGV变量,虽然操作系统已经步入了图形化操作的阶段,但是对于系统管理而言,文本形式的命令行程序依然非常重要。 到此为止,本书中介绍的所有Ruby程序示例都是要么可以在irb中运行,要么就是可以使用ruby.exe解析程序在命令行窗口中直接执行,不难发现原来Ruby命令行程序可以实现如此强大的功能。目前编写完善的命令行程序唯一欠缺的就是接收通过命令行传递给Ruby程序的参数,实际上Ruby提供了一个全局变量ARGV来实现这个功能。ARGV为一数组,可以使用ARGV.size获得参数的数量,ARGV0来获得第一个参数等。,9.3 Win32API和Win32OLE,虽然Ruby诞生于Unix环境,而且不容否认的是Ruby在Unix环境中能够发挥最大的威力,不过Ruby的作者和整个社区都在尽力改变这种情况。Ruby已经迈向了许多平台,作为Ruby的第二平台Windows,很显然也获得了比较成熟的支持。下面就将介绍Ruby对于Windows 32 API接口以及Windows自动化的支持和简单应用。,9.3.1 Win32API简介,Win32 API是Windows操作系统内核与应用程序之间的接口,它将Windows系统内核提供的功能进行函数包装,应用程序通过调用相关函数而获得相应的系统功能。标准Win32APl函数包括系统服务、通用控件库、图形设备接口、网络服务、用户接口、系统Shell以及Windows系统信息等众多方面的支持。 Ruby标准库中提供了一个名为Win32API的库,为Ruby程序提供了访问Window 32 API接口的支持。使用过程可以分为三步: (1)使用Win32API.new定义Ruby对API的接口,例如: get_cursor_pos = Win32API.new(“user32“,“GetCursorPos“,P,V) (2)调用API时,使用Win32API实例的Call方法调用,同时可以传入相应的参数。例如: get_cursor_pos.Call(lpPoint) (3)传入的参数和传回的结果在需要时,可以使用Array的实例方法pack和String的unpack方法设置或获得正确的数据。,9.3.2 Win32OLE简介,OLE (Object Linking and Embedding、对象的链接与嵌入)是一项增强Windows应用程序之间的相互协作性的技术,它使Windows应用程序的功能得以扩展。使用OLE技术,一个Windows应用程序可以启动其他Windows应用程序,也可以显示和控制其他Windows应用程序的数据,并在创建该数据的程序中对它进行编辑。 Win32OLE库是Ruby程序访问Window OLE自动化操作的接口。它所操作的也是对象,因此相对于Win32API而言使用上会更加简单一些。在创建OLE对象时,使用的也是Win32OLE.new方法,参数可以是OLE自动化对象类的名称,也可以是类的CLSID。例如,以下两种方式是一致的: excel = WIN32OLE.new(Excel.Application) excel = WIN32OLE.new(00024500-0000-0000-C000-000000000046),9.3.3 使用Win32OLE操作Word和Excel,Microsoft Office系列的产品都能比较好地支持OLE自动化操作,也即意味着可以使用Ruby自动创建Word文档或者是Excel电子表格。,Win32OLE创建的Word文档,9.3.4 使用Win32OLE控制IE浏览器,代码9-4通过一个示例,来演示如何使用Win32OLE来控制IE浏览器,控制结果如图所示。,Win32OLE控制IE浏览器演示,9.4 Ruby构建图形界面,迄今为止,构建图形界面并不是Ruby的强项。图形界面相关的编程与操作系统的GUI接口密切相关,而Ruby作为一门跨平台的语言,如果需要创建一个通用的图形界面工具或程序显然也是较为复杂的。不过幸好有许多开发人员已经考虑到了这个问题,因而诞生了一些应用于Ruby的GUI图形接口库。与数据库接口库类似,这些GUI接口库封装了许多创建图形界面的代码,使用的人只需要学习接口库中所提供的简化的统一方法,而不需要去考虑如何与不同的操作系统的GUI接口打交道。 目前Ruby中可以使用的图形界面GUI库有很多,常用的有Ruby/Tk、FXRuby、Ruby/GTK、WxRuby以及Shoes等。它们绝大部分都是开源并且可以免费使用的。下面首先对这些常用的GUI库进行一个简要的概述,在后面的几节中将再针对较为有特色的Ruby/Tk、WxRuby和Shoes逐个进行详细的介绍。,9.5 Ruby/Tk应用介绍,下面继续详细介绍Ruby/Tk的应用。虽然Ruby环境中已经自带了Ruby的Tk接口,但是却没有携带完整的Tcl/Tk,因此在使用Ruby/Tk进行应用前仍然需要先下载并安装Tcl/Tk包。,9.5.1 下载并安装Tcl/Tk,在绝大多数的 Linux 发行版中,Tcl/Tk 都是标准选项。不过对于Windows用户而言,可以在ActiveState上下载到Tcl/Tk 二进制安装包,下载的地址为/store/download.aspx?prdGUID=f0cd6399-fefb-466e-ba17-220dcd6f4078。安装包的名称为ActiveTcl,最新的版本为,不过因为Ruby内置的Ruby/Tk是基于Tk 8.4运行的,这里需要下载的是8.4版本的安装包,大小约为24.6M。 运行下载的安装文件,会出现如图所示界面,界面中会显示安装包中所含的组件以及相应的版本。依次单击Next按钮,基本上就完成了ActiveTcl的安装。,ActiveTcl安装界面,9.5.2 编写Hello World,首先编写一个简单的Hello World Tk示例,在编辑器中输入如代码所示的代码:,Hello world程序演示,9.5.3 Tk部件,Tk中,部件是一种可以执行特定功能的图形对象。界面中的任何图形对象都可以视为一个小部件。对于 GUI 应用程序而言,按钮、文本、框架和滚动栏都是小部件。本小节中将介绍几个基本Tk小部件,并提供有关每个小部件的示例,除了前面介绍过的按钮和标签外,还包括框架、多行文本输入框和单行文本输入框。 框架部件(TkFrame),正如其名称所描述的那样是一个框架或盒子,通常用来对其他小部件进行分组。,TkEntry演示,9.5.4 事件处理,窗体中的部件都能响应一定的事件,例如鼠标单击、悬浮或者是键盘按键等。Tk中可以使用bind方法创建一个特定的事件到代码块的绑定。 bind方法接受两个参数,一个是绑定的事件;另外一个就是响应该事件的代码块。使用方法,例如绑定鼠标光标移入事件可以写为: obj.bind(“Enter“) 或者 obj.bind(“Enter“) do end,9.5.5 Canvas画布,Ruby/Tk还提供了TkCanvas类以及其他一些类来支持绘图功能。一般而言,这样的一些类都以 Tkc 开头(c 表示 Canvas)。例如 TkcLine、TkcOval等。下面是一个简单的程序示例,结合前一节介绍的事件绑定方法,实现一个简单的画线的画图板,能够使用鼠标不断在窗口中画线。,Canvas画图板,9.6 WxRuby应用介绍,下面将介绍WxRuby的应用。首先要介绍的的依然是如何在计算机中下载并安装WxRuby。,9.6.1 下载并安装WxRuby,WxRuby的安装过程较为简单,可以使用RubyGems或者去下载WxRuby的源代码然后在计算机中编译,显然使用RubyGems是最简单快捷的方法。 在命令行窗口中输入: gem install wxruby 等待gem程序更新完gem列表后,会提示选择需要安装WxRuby的版本,如下所示: Bulk updating Gem source index for: Select which gem to install for your platform (i386-mswin32) 1. wxruby 1.9.7 (x86-linux) 2. wxruby 1.9.7 (universal-darwin-9) 3. wxruby 1.9.7 (x86-mswin32-60) 4. wxruby 1.9.7 (i386-mswin32) 5. Skip this gem 6. Cancel installation ,9.6.2 第一个WxRuby程序,首先还是以一个Hello world程序来对WxRuby有个初步的认识。代码将会创建一个简单的窗口,并在窗口中简单显示“Hello world”。 代码 Hello world程序 #引用WxRuby库 require “wx“ include Wx # 创建一个继承自Wx:App的类 class HelloWorld App #创建初始化方法 def on_init #创建“Hello World“ Frame helloframe = Frame.new(nil, -1, “Hello World“) #创建静态文本 StaticText.new(helloframe,-1,“Hello World“) #显示窗口 helloframe.show() end end #创建App的实例,展示窗体 HelloWorld.new.main_loop,9.6.3 基本控件介绍,从前面的示例中可以看到WxRuby所提供的控件种类是非常多了,基本的控件都有数十种,这里仅以少数几种为例介绍WxRuby中控件的使用,实际上其他控件的使用方法也大同小异。 1Wx:Panel 2Wx:Button 3Wx:TextCtrl 4Wx:BoxSizer 5演绎常见控件,9.6.4 事件处理,图形界面的程序中必然要涉及到对事件的处理,WxRuby中通过一系列以evt开头的方法来定义事件的响应。例如: #响应大小改变的事件 evt_size puts “大小被改变“ my_button = Wx:Button.new(self, :label = Press me) #响应按钮被单击的事件 evt_button(my_button) puts “Button被单击“ 在事件的响应处理过程中,会传递一个包含事件信息的事件对象作为参数进入响应的代码中。里面的信息可能会包括鼠标的位置、按键的代码等。 例如: evt_size | event | puts “现在的大小为:#event.size.width“ ,9.7 Shoes应用介绍,Shoes也是一个跨平台的图形界面支持库,与Ruby/Tk或者WxRuby不同的是Shoes在设计中借鉴了大量Web特性,同时更加侧重于画图以及动画的功能。,9.7.1 下载并安装Shoes,Shoes的官方网站地址为/shoes/,如图所示。网站页面正中显示的是由Shoes创建的时钟程序分别在苹果Mac OS X系统、WIndows系统和Linux系统中的运行效果截图,正好体现了Shoes的跨平台、图形绘图功能的特性。,Shoes官方网站,9.7.2 第一个Shoes程序,下面介绍如何使用Shoes来构建图形界面程序。首先还是先构建一个最简单的Hello world程序,如代码所示。 代码 Shoes的Hello world程序 #创建Shoes APP窗体 Shoes.app :height = 200, :width = 200 do 创建按钮 button “Click me!“ do #设置单击响应 alert “Hello world!“ end end,Hello world程序,9.7.3 Stacks和Flows介绍,Shoes中界面中元素的布局方式比较类似于HTML页面中的方式。在HTML页面中元素的显示方式有block和inline两种,一种是独占一行,另外一种排列较为紧凑,类似于流的方式,只有依次排满了才会排列到下一行。Shoes中与之对应的有Stacks和Flows这两个概念。,布局排列演示,9.7.4 基本控件,Shoes中支持大部分常用的窗体控件,其中包括Button、Check、EditBox、E

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论