《R和Ruby数据分析之旅》—第1章 1.2节Shoes-阿里云开发者社区

开发者社区> 异步社区> 正文

《R和Ruby数据分析之旅》—第1章 1.2节Shoes

简介: Shoes是个基于Ruby的、用于编写图形程序的、跨平台的工具包。Shoes是完全地、单纯地基于Ruby的,这一点与多数其他工具包不同。其他工具包一般是Ruby和其他UI工具包的混合体。而且Shoes上手非常容易,这是本书使用它的主要动因。
+关注继续查看

本节书摘来自异步社区《R和Ruby数据分析之旅》一书中的第1章,第1.2节Shoes,作者【新加坡】Sau Sheong Chang,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 Shoes
R和Ruby数据分析之旅
本章的第二部分将介绍Shoes——一个基于Ruby的用户界面工具包。Shoes通常并不被用作用户界面工具,而且Ruby本身也并不以建立桌面图形界面见长。其他更为流行的Ruby用户界面工具包有FXRuby、WxRuby、qtRuby和Tk。如果要求完全跨平台,JRuby加Swing的组合是个好选择。尚有不少可以代替Swing的选择,比如SWT和Limelight。在Mac平台上,MacRuby则是个很好的备选。

但在本书中,我们将使用Shoes。

1.2.1 何为Shoes
Shoes是个基于Ruby的、用于编写图形程序的、跨平台的工具包。Shoes是完全地、单纯地基于Ruby的,这一点与多数其他工具包不同。其他工具包一般是Ruby和其他UI工具包的混合体。而且Shoes上手非常容易,这是本书使用它的主要动因。

Shoes最初的创作者叫做why the lucky stiff(是的,这就是他的名字),一个相当著名和神秘的Ruby程序员。他还兼做卡通绘制和音乐演奏。他出名的最主要因素可能是写作了Why’s (poignant) Guide to Ruby,这是一本完全不像编程书籍的教授Ruby编程的书。

由于未知的原因,_why(这是他的别称)在2009年8月注销了他的Twitter和GitHub1账号,并关闭了他的个人网站,这都曾经是Ruby程序员们热衷出没的场所。但是,他完成的许多项目,包括Shoes,被Ruby社区收纳并传承下去。

1.2.2 五彩的“鞋子”(Shoes)
红宝石(Ruby的英文原义)是红色的,所以鞋(Shoes的英文原义)也照样。Red Shoes(英文意为“红色的鞋子”)是Shoes的最初版本,它由_why基于C语言编写。_why离开之后,Ruby社区接管了它,在其基础之上,涌现出了不同类型的Shoes,每种都以不同的颜色来命名。

Red Shoes(红鞋):这是_why编写的最初版本,以C语言为基础。
White Shoes(白鞋):它又被称作meta-Shoes,是各版本Shoes中最通用的一个。它基本上是一组RSpec2测试,用来确认其他版本的Shoes都服从一个统一的标准。
Blue Shoes(蓝鞋):它建立在Qt框架3上,用C++编写,是最初的Ruby用户界面框架。
Green Shoes(绿鞋):这是与Red Shoes在理念上最接近的一款Shoes,因为它使用了GTK4和Cairo5的Ruby绑定接口。它也是最先进的版本之一。
Brown Shoes(棕鞋):这是用JRuby编写的基于Swing6的一个版本。
本书中提到的Shoes都是指Red Shoes。事实上,Red Shoes也是我唯一实际跑过代码的Shoes版本。所以,我要做一个“标准免责声明”,即后面那些代码不能保证在其他版本的Shoes上也能正确运行。但是,非常欢迎你作些这方面的尝试。

1.2.3 安装Shoes
Shoes的安装通常十分简单。如果你使用Mac或Windows系统,只要从Shoes的网站(http://shoesrb.com/downloads)上下载对应平台版本并安装即可。然而Shoes的使用有些反传统,并不像大多数Ruby程序那样通过控制台运行。你需要打开Shoes应用程序,用它来打开和运行你的Shoes程序。可以在Mac或Windows系统中等效地完成下面的工作:

$ /Applications/Shoes.app/Contents/MacOS/shoes test_shoes.rb

如果你使用某种Linux,Shoes的安装会更复杂一些。截至本书写作时,最好的方法是从源代码来完整地生成它。这并不算很复杂,只是需要先安装一些Shoes要依赖的其他的库。这里列出各种Linux下通用的安装步骤:

$ git clone git://github.com/shoes/shoes.git
$ cd shoes
$ gem install bundler
$ bundle install
$ rake

更详细的信息可以参考这个网站:https://github.com/shoes/shoes/wiki/Building-Shoes-on-Linux

1.2.4 编写Shoes程序
我在本书中选择Shoes作为用户界面开发工具的一个主要原因是,它可以相当简便地开发很好的图形界面。因为它是纯Ruby的(与那些Ruby和其他工具的混合体相反),代码的可读性强,易于理解。

一个简单的Shoes程序会像下面这样:

Shoes.app do
   button("Click me!") do
     alert("Ruby rocks!")
   end
end

此程序生成一个简单的窗口,其中只有一个名为“Click me!”的按钮。点击该按钮,会弹出一个警告对话框,如图1-1所示。


9b1637fa7dfa2e638f6901bdc3055ed4e1c577ce

尽管Shoes是一个简单的UI工具,但还是有很多特性,不可能用几节文字就介绍完整。我只能提供一些基本的例子。让我们从建立一个简单的秒表程序开始。

1.Shoes秒表
在例1-1中,我会展示如何用Shoes建立一个非常简单的秒表。


6124447061d6e53e0e58234b01aa709838f91254

所有的Shoes应用代码都必须包含在一个对Shoes.app的调用中。你可以随意设置起始窗口的外观。本例中,我们设定了窗口的宽和高。第二行7代码则设定了窗口的背景颜色。这并不总是必需的,但注意lightblue(浅蓝色)是Shoes窗口的预设颜色。Shoes 借鉴了X118和HTML9调色板定义的一系列默认颜色方案,并用直观的名字来代表它们。如果你倾向于建立自己的自定义颜色方案,可以利用rgb方法。

Shoes应用程序中的元素用槽(slot)来安排,它作为容器,可以盛载若干元素,或者其他槽。槽还可以被嵌套,通过对槽和元素进行嵌套可以编制相当复杂的布局。槽有两种常见类型,即栈(stack)和流(flow)

栈。栈是按上下次序排放的一“摞”元素的集合。例1-1所示的秒表程序将3个元素放入了栈中:一个说明文本块(block)、一个流槽和一个段落文本块。
流。流槽将元素按一个接一个的顺序排成一“队”,紧密衔接。例1-1所示的秒表程序将两个按钮放到一个流中,一个标记为“start”(开始),一个标记为“stop”(结束)。
你也可以为槽设置配置参数。秒表例子中的栈就通过参数设置了10个像素宽的边距。

button(按钮)元素为应用程序生成一个按钮。如果在元素中加入像例子中所示的代码块,当单击按钮时,就会执行其中的代码。另一种设置按钮点击后行为的方法是使用click方法,稍后我们会讲到。

执行先前的代码,你可以看到图1-2所示的秒表。


ac8dd3c7d5a60219da29a42bc9ecf40cd1d308fe

这是个相当传统的用户界面,让我们来做点更有艺术含量的事情。

2.Shoes涂鸦程序
我们来编写一个简单的涂鸦程序。例1-2中的这个程序是个标准的演示程序,并没有多少使用价值,但阐明了Shoes的一些基本概念。


86214fe7a4e2d817ac88e2e16316b0726241225e

这个程序看上去比秒表程序还要简单。让我们从描述animate方法入手来理解它。这个方法启动一个动画计时器,与程序剩下的部分并行执行。我们指定了当动画循环开始后每秒显示的帧数,所以程序会无限地循环下去。你可能会想到,这对于模拟运行而言是一个完美的方法。

self.mouse方法返回一个由3个数组成的数组。第一个数是按下的鼠标按键的编号。如果没有键被按下,这个值将是0。第二个和第三个数表示鼠标光标的左端和上端的位置。我们将这3个数分别赋给变量button、left和top。

如果鼠标左键(即1号键)被点击,程序会画一条从光标原来位置出发,到光标当前位置的线段。因为我们处在动画循环中,如果我们连续移动鼠标,就会产生在屏幕上绘画的效果。

相似地,如果点击3号按键(通常是滚轮键),程序会画一个五角星。因为我们定制了所有画出的图形的填充颜色为红色,我们将会在屏幕上画出红五星。程序运行结果的一个示例如图1-3所示。


5b825087686957b2e16f023be5531c1870a865f5

1 GitHub是一个为Git库提供托管服务的网站,Git则是流行的版本控制系统之一。——译者注
2一个基于Ruby的行为驱动测试包。——译者注
3 Qt是一个功能强大的跨平台的C++图形界面开发框架。——译者注
4 GTK是一套跨平台图形界面工具包。——译者注
5 Cario是一套矢量图形绘图库。——译者注
6 Swing是一套用于开发Java应用程序用户界面的开发工具包。——译者注
7原文中代码的按行计数方式与中文文献中的习惯有所不同,译者对之稍做了修改。——译者注
8又名X窗口系统(X Window),是一套图形界面操作系统的标准工具包和协议。——译者注
9超文本标记语言,当前互联网网页的标准描述语言。——译者注

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
2857 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4488 0
《R和Ruby数据分析之旅》—第1章 1.1节Ruby
Ruby和R。帽子和鞭子作为野外考察的工具,对考古学教授来说不同寻常,同样,在探索周围世界方面,Ruby和R也并不寻常。它们能够让事情变得更有意思。
1779 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9426 0
《R和Ruby数据分析之旅》—第1章 1.2节Shoes
Shoes是个基于Ruby的、用于编写图形程序的、跨平台的工具包。Shoes是完全地、单纯地基于Ruby的,这一点与多数其他工具包不同。其他工具包一般是Ruby和其他UI工具包的混合体。而且Shoes上手非常容易,这是本书使用它的主要动因。
1590 0
《R和Ruby数据分析之旅》—第1章 1.3节小结
把关于Ruby的全部内容放在一本书里是不可能的,更不用说一章文字了。我在这里所想做的是介绍这门语言,并提供对Ruby可以做的事情的简单一瞥。
1466 0
阿里云服务器远程登录用户名和密码的查询方法
阿里云服务器远程连接登录用户名和密码在哪查看?阿里云服务器默认密码是什么?云服务器系统不同默认用户名不同
444 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
3829 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
3228 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
11939
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载