Gem 一套使用 HTML 为 Ruby 构建 GUI 的工具

cicholgricenchos · 2015年03月20日 · 最后由 hgyxbll 回复于 2018年07月02日 · 2781 次阅读

简介

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下使用,以后会尝试适配其他系统。不过其他功能是没有系统依赖的,可以试试看。

共收到 9 条回复

gem install shenmegui 到linux上果然不能运行,在windows上可以。写gui的方式挺优美。

#1楼 @africwildman
`start`,读取comdlg32.dll,文件名区分大小写,三个问题导致linux不能运行。。现在都修复了,试试新的0.3.3版本
linux下get_open_file_name恒返回空路径,别的应该没问题了

技术上看有点意思,不过现在都搞app开发了,win32桌面程序没什么吸引力啦

中文名叫 什么鬼 么...

window用户么?

项目还是挺有意思的。 我看了半天代码没看明白那个window是怎么生成的。win32创建window的代码没看到。我也不打算深入研究了。 下面说说现实点的吧:

这个项目业余玩玩可以,但真的没有实用价值和前途。谁会用ruby写桌面GUI?我是一个例子都没见过呢。我最近也在开发各种桌面App, 做过不少的调查。 我最终的结论是最好使用各个平台上官方的解决方案。 比如Mac你就用Cocoa,Windows你就用WPF / Universal App ... 第三方的方案,做hello world很好很快,做点复杂的就很蛋疼。

最后还是必须承认这是个好玩的项目。练练技术还是不错的。

#6楼 @tylerlong 我就是业余玩玩,不过自己做东西的时候也可以用到。
那个窗口的代码就在file_dialog.rb里啊,构造了一个结构体,然后调用了windows c api的GetOpenFileName函数,就是这个

这个挺好, 整体代码量少,以后捆绑一个简易浏览器在里面,可以做些简单的GUI,跨平台。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册