文档章节

ruby tk秒表的应用

D
 D-dragon
发布于 2014/08/10 16:33
字数 679
阅读 82
收藏 0

ruby这种语言,看起来好像挺简单的,但实际上掌握起来难度应该要比JAVA这种语言更大的,主要是因为它非常灵活,涉及的内容也非常的多,当然本人也没专职干过这个,只是偶尔有空陆续写点东西。

最近在看《松本行弘的编程世界》时,发现这本书确实写得很好,既有高度也有深度,而且还很有广度。里面的代码也比较有参考价值,比如书中举了一个秒表的例子:

require 'observer'
require 'tk' 

class WatchModel
	include Observable
	def initialize
		@running = false
		@time = 0
		@last = 0.0
		Thread.start  do
			loop do
				sleep 0.01
				if @running
					now = Time.now.to_f
					@time += now-@last
					@last = now
					changed
					notify_observers(@time)
				end
			end
		end
	end
	def start_stop
		@last = Time.now.to_f
		@running = !@running
	end
end

class WatchWindow
	def initialize
		model = WatchModel.new
		model.add_observer(self)

		@label = TkLabel.new do
			pack('fill'=>'x')
		end

		self.update(0)
		TkButton.new do
			text 'start/stop'
			background '#ccc'
			command{model.start_stop}
			pack('fill'=>'x')
		end
		TkButton.new do
			text 'quit'
			command{exit}
			pack('fill'=>'x')
		end
		Tk.mainloop
	end

	def update(time)
		@label.text format("%02d:%02d",time.to_i,(time-time.to_i)*100)
	end
end

WatchWindow.new

实际的效果图大概如下:

 

这代码采用MVC的模式开发,使用了Tk这个图形工具包,利用了ruby内部支持的oberver模式实现通信。还需要说一点的是,时间不断变化这个功能是通过loop循环实现的,这个是一个死循环,如果不放在Thread里面,那么以后的代码就不会被执行,所以要单独开启一个线程去完成。

另外,ruby tk这个东西学起来相当不容易,资料太少, 有个网站:

www.tutorialspoint.com/ruby/ruby_tk_guide.htm

这个网站有些初步的介绍,不过举的例子都非常简单,只适合入门级。

还一本书,叫《Mastering Perl Tk》,这本书虽然采用的是perl语法,但是却讲得比较详细,而目前市面上还没有关于ruby tk的书,所以学习ruby tk基本上都是以这本书为主。比如,我要设置主窗口的位置,即设置TkRoot的位置,该怎么做?

关于这个问题,我翻遍了网上所有的资料,甚至还看了下tk的部分源代码(里面代码很少有注释,所以也不太清楚方法与参数的意思是什么),最后都没找到解决办法,最后只能再看看这本书面有答案没得,很庆幸,找到了!

用法大体如下:

TkRoot.new do
    title '秒表'
    minsize(200,200)
    geometry('200x200+400+200')
end

关键点就是那个geometry方法,200x200代表宽和高,中间用‘x'隔开,而后面的400、200代表主窗口的x、y初始坐标,用的是“+”号,这种用法虽然有点怪异,但也算简洁明了。

© 著作权归作者所有

上一篇: EXCEL常用函数
D
粉丝 7
博文 44
码字总数 43763
作品 0
资阳
程序员
私信 提问
Arcadia Ruby IDE 0.8.1 发布

Arcadia 是一个轻量级的Ruby语言的集成开发环境,采用Ruby语言编写,使用的是 Tcl/Tk GUI工具包。主要的功能包括代码编辑、源文件浏览、语法高亮、代码自动完成以及调试等,可以运行在装有 ...

红薯
2010/04/11
492
0
Arcadia 0.11.1.1 发布,Ruby 集成开发环境

Arcadia 0.11.1.1 主要修复了在某些环境(例如 Fedora 16 + Ruby 1.8.7)下程序崩溃的问题。 Arcadia 是一个轻量级的Ruby语言的集成开发环境,采用Ruby语言编写,使用的是 Tcl/Tk GUI工具包。...

红薯
2012/03/08
732
2
Arcadia 0.9.2 发布,Ruby开发工具

Arcadia 是一个轻量级的Ruby语言的集成开发环境,采用Ruby语言编写,使用的是 Tcl/Tk GUI工具包。主要的功能包括代码编辑、源文件浏览、语法高亮、代码自动完成以及调试等,可以运行在装有 ...

红薯
2010/11/22
646
8
Ruby开发工具--Arcadia

Arcadia 是一个轻量级的Ruby语言的集成开发环境,采用Ruby语言编写,使用的是 Tcl/Tk GUI工具包。主要的功能包括代码编辑、源文件浏览、语法高亮、代码自动完成以及调试等,可以运行在装有 ...

匿名
2009/02/22
5.1K
0
Ruby/Tk

Ruby/Tk 是一个重要的 Ruby 扩展,它为开发人员使用 Ruby 进行 Tk 程序开发提供了接口。Ruby 的主发行包中包含 Ruby/Tk,也就是说,您不需要安装额外的 Ruby 扩展就可以进行 Ruby/Tk 程序开发...

匿名
2010/03/02
3.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
10
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
81
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部