ShenmeGUI(先不要吐槽这个名字)是一套受Shoes启发而诞生的 GUI 工具,拥有相似的 DSL 语法,可以便捷地实现一些轻量的 GUI 应用。
程序将 DSL 语句转化为 HTML 结构,并使用 Javascript 绑定上一些事件,使 HTML 的前端和 Ruby 的后端可以进行双向的数据同步。
前端视图的变化会立即同步到后端(通过对 input 等事件的监听),若触发事件,则会额外传递一个事件信号。后端接收到事件信号则执行相应的回调函数,对控件属性的修改也会即时反映到 HTML 视图。
前后端的数据通信是通过 WebSocket 实现的。
项目托管在 https://github.com/CicholGricenchos/ShenmeGUI
这是我第一次做开源项目,希望得到各位前辈的指点:-)
require 'shenmegui'
ShenmeGUI.app do
form(title: 'Your Application') do
button('alert').onclick do
alert 'Hello World!'
end
button('open an image').onclick do
path = get_open_file_name
@t.text = path
@i.src = path
end
stack do
label 'image path:'
@t = textarea '', width: '100%'
end
@i = image "http://7jpqbr.com1.z0.glb.clouddn.com/bw-2014-06-19.jpg"
@p = progress(75)
button('+').onclick { @p.percent += 5 }
button('-').onclick { @p.percent -= 5 }
end
end
ShenmeGUI.start!
将会产生如图所示的界面:
button 定义按钮,并通过 onclick 绑定上了点击事件。第一个按钮弹出一个对话框,第二个按钮弹出一个打开文件的对话框,将文件路径写到下方定义的 textarea 里,并改变 image 的 src 以显示这个图片。
下方的两个按钮演示了进度条的增减。
目前“打开文件”的功能是通过 fiddle 调用 windows api 实现的,所以只能在 windows 下使用,以后会尝试适配其他系统。不过其他功能是没有系统依赖的,可以试试看。