《系統(tǒng)相關(guān)和圖形界面.ppt》由會員分享,可在線閱讀,更多相關(guān)《系統(tǒng)相關(guān)和圖形界面.ppt(27頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第9章 系統(tǒng)相關(guān)和圖形界面,對于系統(tǒng)管理員而言,可能每天都會需要與腳本打交道,有時是為了簡單的諸如自動備份和恢復(fù)系統(tǒng)的任務(wù),有時是因為需要自動完成很復(fù)雜且不斷重復(fù)性的工作,例如周期性的檢測和釋放磁盤空間,存儲24小時內(nèi)的所有系統(tǒng)設(shè)置的改動等。腳本語言沒有繁冗的語法限制,能夠快速地開發(fā)和執(zhí)行,即寫即用,而且與操作系統(tǒng)結(jié)合非常緊密,其實最初就是為了協(xié)助系統(tǒng)管理員而誕生的。Ruby作為一門新興的動態(tài)腳本語言,很好地繼承了前輩在系統(tǒng)管理方面的優(yōu)勢。在本章中將會全面介紹Ruby在系統(tǒng)方面的技術(shù)和技巧。另外在本章的后半部分還將介紹如何使用Ruby創(chuàng)建圖形界面(GUI)。,9.1 運行外部程序,運行外部程序
2、,是與外部系統(tǒng)交互的一種方式,也是系統(tǒng)操作最基礎(chǔ)的功能之一。Ruby提供了多種運行外部程序的方式。 (1)第一種方式是使用%x方法,它可以執(zhí)行外部命令或程序,運行時,會一直等待程序運行結(jié)束然后再繼續(xù)執(zhí)行后面的代碼,運行完畢后會將程序輸出的結(jié)果以字符串形式返回。例如: list = %x(dir) (2)另外一種方式是使用system方法,很多語言中都有同名的方法,它通過一定的內(nèi)部機制執(zhí)行指定的命令。例如: system(“notepad”) #打開記事本 system(“dir c:”) #顯示c:下的目錄文件,9.2 編寫命令行程序和ARGV變量,雖然操作系統(tǒng)已經(jīng)步入了圖形化操作的階段,但
3、是對于系統(tǒng)管理而言,文本形式的命令行程序依然非常重要。 到此為止,本書中介紹的所有Ruby程序示例都是要么可以在irb中運行,要么就是可以使用ruby.exe解析程序在命令行窗口中直接執(zhí)行,不難發(fā)現(xiàn)原來Ruby命令行程序可以實現(xiàn)如此強大的功能。目前編寫完善的命令行程序唯一欠缺的就是接收通過命令行傳遞給Ruby程序的參數(shù),實際上Ruby提供了一個全局變量ARGV來實現(xiàn)這個功能。ARGV為一數(shù)組,可以使用ARGV.size獲得參數(shù)的數(shù)量,ARGV0來獲得第一個參數(shù)等。,9.3 Win32API和Win32OLE,雖然Ruby誕生于Unix環(huán)境,而且不容否認的是Ruby在Unix環(huán)境中能夠發(fā)揮最大的
4、威力,不過Ruby的作者和整個社區(qū)都在盡力改變這種情況。Ruby已經(jīng)邁向了許多平臺,作為Ruby的第二平臺Windows,很顯然也獲得了比較成熟的支持。下面就將介紹Ruby對于Windows 32 API接口以及Windows自動化的支持和簡單應(yīng)用。,9.3.1 Win32API簡介,Win32 API是Windows操作系統(tǒng)內(nèi)核與應(yīng)用程序之間的接口,它將Windows系統(tǒng)內(nèi)核提供的功能進行函數(shù)包裝,應(yīng)用程序通過調(diào)用相關(guān)函數(shù)而獲得相應(yīng)的系統(tǒng)功能。標準Win32APl函數(shù)包括系統(tǒng)服務(wù)、通用控件庫、圖形設(shè)備接口、網(wǎng)絡(luò)服務(wù)、用戶接口、系統(tǒng)Shell以及Windows系統(tǒng)信息等眾多方面的支持。 Rub
5、y標準庫中提供了一個名為Win32API的庫,為Ruby程序提供了訪問Window 32 API接口的支持。使用過程可以分為三步: (1)使用Win32API.new定義Ruby對API的接口,例如: get_cursor_pos = Win32API.new(user32,GetCursorPos,P,V) (2)調(diào)用API時,使用Win32API實例的Call方法調(diào)用,同時可以傳入相應(yīng)的參數(shù)。例如: get_cursor_pos.Call(lpPoint) (3)傳入的參數(shù)和傳回的結(jié)果在需要時,可以使用Array的實例方法pack和String的unpack方法設(shè)置或獲得正確的數(shù)據(jù)。,9.
6、3.2 Win32OLE簡介,OLE (Object Linking and Embedding、對象的鏈接與嵌入)是一項增強Windows應(yīng)用程序之間的相互協(xié)作性的技術(shù),它使Windows應(yīng)用程序的功能得以擴展。使用OLE技術(shù),一個Windows應(yīng)用程序可以啟動其他Windows應(yīng)用程序,也可以顯示和控制其他Windows應(yīng)用程序的數(shù)據(jù),并在創(chuàng)建該數(shù)據(jù)的程序中對它進行編輯。 Win32OLE庫是Ruby程序訪問Window OLE自動化操作的接口。它所操作的也是對象,因此相對于Win32API而言使用上會更加簡單一些。在創(chuàng)建OLE對象時,使用的也是Win32OLE.new方法,參數(shù)可以是OL
7、E自動化對象類的名稱,也可以是類的CLSID。例如,以下兩種方式是一致的: excel = WIN32OLE.new(Excel.Application) excel = WIN32OLE.new(00024500-0000-0000-C000-000000000046),9.3.3 使用Win32OLE操作Word和Excel,Microsoft Office系列的產(chǎn)品都能比較好地支持OLE自動化操作,也即意味著可以使用Ruby自動創(chuàng)建Word文檔或者是Excel電子表格。,,Win32OLE創(chuàng)建的Word文檔,9.3.4 使用Win32OLE控制IE瀏覽器,代碼9-4通過一個示例,來演示如
8、何使用Win32OLE來控制IE瀏覽器,控制結(jié)果如圖所示。,,Win32OLE控制IE瀏覽器演示,9.4 Ruby構(gòu)建圖形界面,迄今為止,構(gòu)建圖形界面并不是Ruby的強項。圖形界面相關(guān)的編程與操作系統(tǒng)的GUI接口密切相關(guān),而Ruby作為一門跨平臺的語言,如果需要創(chuàng)建一個通用的圖形界面工具或程序顯然也是較為復(fù)雜的。不過幸好有許多開發(fā)人員已經(jīng)考慮到了這個問題,因而誕生了一些應(yīng)用于Ruby的GUI圖形接口庫。與數(shù)據(jù)庫接口庫類似,這些GUI接口庫封裝了許多創(chuàng)建圖形界面的代碼,使用的人只需要學(xué)習(xí)接口庫中所提供的簡化的統(tǒng)一方法,而不需要去考慮如何與不同的操作系統(tǒng)的GUI接口打交道。 目前Ruby中可以使用
9、的圖形界面GUI庫有很多,常用的有Ruby/Tk、FXRuby、Ruby/GTK、WxRuby以及Shoes等。它們絕大部分都是開源并且可以免費使用的。下面首先對這些常用的GUI庫進行一個簡要的概述,在后面的幾節(jié)中將再針對較為有特色的Ruby/Tk、WxRuby和Shoes逐個進行詳細的介紹。,9.5 Ruby/Tk應(yīng)用介紹,下面繼續(xù)詳細介紹Ruby/Tk的應(yīng)用。雖然Ruby環(huán)境中已經(jīng)自帶了Ruby的Tk接口,但是卻沒有攜帶完整的Tcl/Tk,因此在使用Ruby/Tk進行應(yīng)用前仍然需要先下載并安裝Tcl/Tk包。,9.5.1 下載并安裝Tcl/Tk,在絕大多數(shù)的 Linux 發(fā)行版中,Tcl/
10、Tk 都是標準選項。不過對于Windows用戶而言,可以在ActiveState上下載到Tcl/Tk 二進制安裝包,下載的地址為 8.4運行的,這里需要下載的是8.4版本的安裝包,大小約為24.6M。 運行下載的安裝文件,會出現(xiàn)如圖所示界面,界面中會顯示安裝包中所含的組件以及相應(yīng)的版本。依次單擊Next按鈕,基本上就完成了ActiveTcl的安裝。,,ActiveTcl安裝界面,9.5.2 編寫Hello World,首先編寫一個簡單的Hello World Tk示例,在編輯器中輸入如代碼所示的代碼:,,Hello world程序演示,9.5.3 Tk部件,Tk中,部件是一種可以執(zhí)行特定功能的
11、圖形對象。界面中的任何圖形對象都可以視為一個小部件。對于 GUI 應(yīng)用程序而言,按鈕、文本、框架和滾動欄都是小部件。本小節(jié)中將介紹幾個基本Tk小部件,并提供有關(guān)每個小部件的示例,除了前面介紹過的按鈕和標簽外,還包括框架、多行文本輸入框和單行文本輸入框。 框架部件(TkFrame),正如其名稱所描述的那樣是一個框架或盒子,通常用來對其他小部件進行分組。,,TkEntry演示,9.5.4 事件處理,窗體中的部件都能響應(yīng)一定的事件,例如鼠標單擊、懸浮或者是鍵盤按鍵等。Tk中可以使用bind方法創(chuàng)建一個特定的事件到代碼塊的綁定。 bind方法接受兩個參數(shù),一個是綁定的事件;另外一個就是響應(yīng)該事件的代碼
12、塊。使用方法,例如綁定鼠標光標移入事件可以寫為: obj.bind(Enter) 或者 obj.bind(Enter) do end,9.5.5 Canvas畫布,Ruby/Tk還提供了TkCanvas類以及其他一些類來支持繪圖功能。一般而言,這樣的一些類都以 Tkc 開頭(c 表示 Canvas)。例如 TkcLine、TkcOval等。下面是一個簡單的程序示例,結(jié)合前一節(jié)介紹的事件綁定方法,實現(xiàn)一個簡單的畫線的畫圖板,能夠使用鼠標不斷在窗口中畫線。,,Canvas畫圖板,9.6 WxRuby應(yīng)用介紹,下面將介紹WxRuby的應(yīng)用。首先要介紹的的依然是如何在計算機中下載并安裝WxRuby。,
13、9.6.1 下載并安裝WxRuby,WxRuby的安裝過程較為簡單,可以使用RubyGems或者去下載WxRuby的源代碼然后在計算機中編譯,顯然使用RubyGems是最簡單快捷的方法。 在命令行窗口中輸入: gem install wxruby 等待gem程序更新完gem列表后,會提示選擇需要安裝WxRuby的版本,如下所示: Bulk updating Gem source index for: http://gems.rubyforge.org Select which gem to install for your platform (i386-mswin32) 1. wxruby 1
14、.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有個初步的認識。代碼將會創(chuàng)建一個簡單的窗口,并在窗口中簡單顯示“Hello world”。 代碼 Hello world程序 #引用WxRuby庫 require wx include Wx
15、 # 創(chuàng)建一個繼承自Wx::App的類 class HelloWorld < App #創(chuàng)建初始化方法 def on_init #創(chuàng)建Hello World Frame helloframe = Frame.new(nil, -1, Hello World) #創(chuàng)建靜態(tài)文本 StaticText.new(helloframe,-1,Hello World) #顯示窗口 helloframe.show() end end #創(chuàng)建App的實例,展示窗體 HelloWorld.new.main_loop,9.6.3 基本控件介紹,從前面的示例中可以看到WxRuby所提供的控件種類是非常多了,基本
16、的控件都有數(shù)十種,這里僅以少數(shù)幾種為例介紹WxRuby中控件的使用,實際上其他控件的使用方法也大同小異。 1Wx::Panel 2Wx::Button 3Wx::TextCtrl 4Wx::BoxSizer 5演繹常見控件,9.6.4 事件處理,圖形界面的程序中必然要涉及到對事件的處理,WxRuby中通過一系列以evt開頭的方法來定義事件的響應(yīng)。例如: #響應(yīng)大小改變的事件 evt_size puts 大小被改變 my_button = Wx::Button.new(self, :label = Press me) #響應(yīng)按鈕被單擊的事件 evt_button(my_button) puts
17、Button被單擊 在事件的響應(yīng)處理過程中,會傳遞一個包含事件信息的事件對象作為參數(shù)進入響應(yīng)的代碼中。里面的信息可能會包括鼠標的位置、按鍵的代碼等。 例如: evt_size | event | puts 現(xiàn)在的大小為:#event.size.width ,9.7 Shoes應(yīng)用介紹,Shoes也是一個跨平臺的圖形界面支持庫,與Ruby/Tk或者WxRuby不同的是Shoes在設(shè)計中借鑒了大量Web特性,同時更加側(cè)重于畫圖以及動畫的功能。,9.7.1 下載并安裝Shoes,Shoes的官方網(wǎng)站地址為 OS X系統(tǒng)、WIndows系統(tǒng)和Linux系統(tǒng)中的運行效果截圖,正好體現(xiàn)了Shoes的跨平臺
18、、圖形繪圖功能的特性。,,Shoes官方網(wǎng)站,9.7.2 第一個Shoes程序,下面介紹如何使用Shoes來構(gòu)建圖形界面程序。首先還是先構(gòu)建一個最簡單的Hello world程序,如代碼所示。 代碼 Shoes的Hello world程序 #創(chuàng)建Shoes APP窗體 Shoes.app :height = 200, :width = 200 do 創(chuàng)建按鈕 button Click me! do #設(shè)置單擊響應(yīng) alert Hello world! end end,,Hello world程序,9.7.3 Stacks和Flows介紹,Shoes中界面中元素的布局方式比較類似于HTM
19、L頁面中的方式。在HTML頁面中元素的顯示方式有block和inline兩種,一種是獨占一行,另外一種排列較為緊湊,類似于流的方式,只有依次排滿了才會排列到下一行。Shoes中與之對應(yīng)的有Stacks和Flows這兩個概念。,,布局排列演示,9.7.4 基本控件,Shoes中支持大部分常用的窗體控件,其中包括Button、Check、EditBox、EditLine、Image、ListBox、Radio等,有許多控件都是直接來自于HTML。這些控件的使用方法都非常簡單,調(diào)用相應(yīng)名稱的方法,并傳入一個Hash參數(shù)即可。,,基本控件演示,9.7.5 繪圖和動畫,Shoes的強項在于繪圖和動畫,它
20、提供了大量的方法能夠繪制各種圖形以及進行顏色和背景填充,另外構(gòu)造動畫的方法也非常簡單。 Shoes所提供的繪圖方法有如下所示的幾種。 畫線方法:line(x1, y1, x2, y2) 畫圓或者橢圓方法:oval(x, y, w, h) 畫方框方法:rect(x, y, w, h) 畫箭頭方法:arrow(x, y, size) 畫星形圖案:star(x, y, p, r, inner),9.8 小結(jié),本章中介紹了Ruby在操作系統(tǒng)方面的應(yīng)用以及構(gòu)建圖形界面。9.1節(jié)中介紹了在Ruby程序內(nèi)部調(diào)用外部程序的方法,隨后9.2節(jié)中介紹了如何創(chuàng)建Ruby命令行程序,讓Ruby自動化完成一些系統(tǒng)的操作,并能夠傳入?yún)?shù)對程序進行控制。隨后把應(yīng)用平臺聚焦在Windows系統(tǒng)中,介紹了如何使用Win32API和Win32OLE來執(zhí)行Windows系統(tǒng)特有的接口或自動化操作。最后幾節(jié)中介紹了如何使用Ruby開發(fā)構(gòu)建圖形界面,對目前較為流行的Ruby圖形界面接口進行了一系列的概述,同時以Ruby/Tk、WxRuby和Shoes為例進行了詳細的應(yīng)用講解。相信在閱讀完本章后,Ruby能夠幫助讀者完成一些繁瑣的任務(wù),成為讀者日常工作和應(yīng)用中的好幫手。,