`
秦朝古月
  • 浏览: 227573 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

试用GtkSimpleLayout制作UI

    博客分类:
  • Ruby
阅读更多
rubynroll的《300行代码你能做什么》中,介绍了GtkSimpleLayout,实现了类似Shose的代码风格。

http://github.com/rickyzheng/GtkSimpleLayout/tree/master下载了最新的代码,编译的时候却无法通过,显示SyntaxError。
引用
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': ./simple_layout.rb:105: syntax error, unexpected ',', expecting '|' (SyntaxError)
        define_method(k) do |*args, &block|
                                   ^
./simple_layout.rb:487: syntax error, unexpected kEND, expecting $end   from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from test1.rb:2

调查了之后发现,原来Ruby 1.8中,define_method中不能使用block,Ruby 1.9中没有问题。因此对simple_layout.rb的代码进行了如下修改。
105行:
        define_method(k) do |*args, &block|
          create_component(v, args, block)
        end
         ↓
eval <<-EOM
        def #{k}(*args, &block)
          create_component("#{v}", args, block)
        end
EOM

432行:
    def create_component(component_class, args, block)
      @common_attribute ||= []
      options = {}
      options = args.pop if args.last.is_a?(Hash)
      options.merge! @common_attribute.last if @common_attribute.last
      
      
+      w = eval("#{component_class}.new(*args)")
      layout_component(w, options, &block)
    end

终于编译通过了。

简单的实验
竖排三个按钮
require 'gtk2'
require 'simple_layout'

class MyWin < Gtk::Window
  include SimpleLayout::Base
  def initialize
    super
    add my_layout
    signal_connect('destroy') do
      Gtk.main_quit
    end
  end

  def my_layout
    vbox do
      button 'Mice'
      button 'Eagles'
      button 'Quail'
    end
  end
end

MyWin.new.show_all
Gtk.main

计算器布局
require 'gtk2'  
require 'simple_layout'  
  
class MyWin < Gtk::Window  
  include SimpleLayout::Base  
  def initialize  
    super  
    add my_layout  
    signal_connect('destroy') do  
      Gtk.main_quit  
    end  
  end  
  
  def my_layout  
    vbox do  
      with_attr :border_width => 3 do  
        hbox do  
          entry :id => :ent_input, :layout => [true, true, 5]  
        end  
        hbox do  
          frame do  
            label 'M', :set_size_request => [20, 20]  
          end  
          hbutton_box do  
            button 'Backspace'  
            button 'CE'  
            button 'C'  
          end  
        end  
        hbox do  
          vbutton_box do  
            button 'MC'  
            button 'MR'  
            button 'MS'  
            button 'M+'  
          end  
          with_attr :layout => [true, true] do  
            number_and_operators_layout  
          end  
        end  
      end  
    end  
  end  
  
  def number_and_operators_layout  
    vbox do  
      [ ['7', '8', '9', '/', 'sqt'],  
        ['4', '5', '6', '*', '%'],  
        ['1', '2', '3', '-', '1/x'],  
        ['0', '+/=', '.', '+', '=']].each do |cols|  
        hbox :layout => [true, true] do  
          cols.each do |txt|  
            button txt, :set_size_request => [20, 20], :layout => [true, true]  
          end  
        end  
      end  
    end  
  end  
  
end  
  
MyWin.new.show_all  
Gtk.main

模仿http://the-shoebox.org/apps/126写的小程序
require 'gtk2'
require 'simple_layout'

class MyWin < Gtk::Window
  include SimpleLayout::Base
  def initialize
    super('Little Helper v0.4')
    add my_layout
    signal_connect('destroy') do
      Gtk.main_quit
    end
    register_auto_events()
  end
  
  def my_layout
    entry1 = nil
    vpaned do
      area_first do
        frame 'Awful numbers', :border_width => 5 do
          vbox do
            label 'Hours/week', :set_size_request => [200, -1]
            @entry1 = entry :layout => [false, false], :max_length => 20, :id => :entry1
            label 'Money/hour', :set_size_request => [200, -1]
            @entry2 = entry :layout => [false, false], :max_length => 20, :text => '16', :id => :entry2
            label 'Tax (in %)', :set_size_request => [200, -1]
            @entry3 = entry :layout => [false, false], :max_length => 20, :text => '20', :id => :entry3
          end
        end
      end
      area_second do
        frame 'Rags or riches', :border_width => 5 do
          vbox do
            @lab1 = label '0.0'
          end
        end
      end
    end
  end
  
  def entry1_on_key_release_event(*_)
    @lab1.text = calculate.to_s
  end
  
  def entry2_on_key_release_event(*_)
    @lab1.text = calculate.to_s
  end
  
  def entry3_on_key_release_event(*_)
    @lab1.text = calculate.to_s
  end 

  def calculate
     @entry1.text.to_f * @entry2.text.to_f * ((100-@entry3.text.to_f)/100.0) * 4.3
  end
end

MyWin.new.show_all
Gtk.main

参考:
http://coderrr.wordpress.com/2008/10/29/using-define_method-with-blocks-in-ruby-18/
分享到:
评论

相关推荐

    MTK 中制作UI工具

    "MTK 中制作UI工具"这个主题涉及到如何在MTK平台上高效地构建和优化用户界面。 UI工具通常包括一系列软件工具,用于设计、测试和调试用户界面元素。这些工具可能涵盖图形设计、交互设计、布局编辑和性能分析等方面...

    C#winform制作绚丽的Ui界面

    在C# WinForm开发中,创建...总结,C# WinForm制作绚丽的UI界面需要掌握自定义控件、界面换肤、DLL引用以及布局和动画效果的应用。通过不断学习和实践,开发者可以打造出极具吸引力的桌面应用,提升用户的使用体验。

    WOW UI制作指南

    《WOW UI制作指南》是一本专为魔兽世界(World of Warcraft,简称WOW)UI设计初学者编写的教程。UI,全称User Interface,即用户界面,是玩家与游戏进行交互的重要部分。在WOW中,UI不仅包括游戏默认的界面元素,还...

    Office Word,Excel Tab页制作工具 customUI

    这个标题和描述提到的"Office Word,Excel Tab页制作工具 customUI"显然是一个专门用于编辑和创建自定义Ribbon界面的工具。这个工具可能提供了图形化的界面,使得非程序员也能轻松地调整或添加新的标签、按钮和菜单项...

    PHP开发的58商铺全新UI试客试用平台网站源码.rar

    总之,58商铺全新UI试客试用平台网站源码为商家和用户提供了全面的交互体验,结合红包和分销功能,可以有效提升用户参与度和商品销售。对于开发者来说,这是一个了解和学习PHP Web开发,尤其是电商网站功能实现的好...

    uipath使用手册

    UiPath是一款机器人流程自动化工具,主要用于简化企业中重复性、手动的任务,实现自动化流程管理。本手册针对使用UiPath进行机器人自动化开发与部署的用户,提供了关于工作流程设计、UI自动化、项目组织、自动化生命...

    Unity UI CurvedUI VR曲面界面

    Unity UI CurvedUI VR曲面界面是一个专门设计用于虚拟现实(VR)环境的用户界面解决方案。这个工具包允许开发者创建的界面元素不仅限于传统的2D平面,而是能够在3D空间中以曲面的形式展现,为用户提供更加沉浸式和...

    UI界面设计与制作(全彩慕课版)——PPT.rar

    《UI界面设计与制作》是一门专注于用户界面设计与实现的课程,主要针对那些希望提升自己在数字产品设计领域技能的学生或专业人士。本课程通过全彩的PPT形式,为学习者提供了丰富的视觉体验和详细的教学内容。PPT中...

    游戏UI制作入门

    【游戏UI制作入门】是指利用编程技术,特别是脚本语言,来创建和定制游戏用户界面的过程。这个领域特别关注的是如何使用LUA这种脚本语言,以及相关的开发环境和工具来设计和实现游戏中的交互元素。 【描述】中提到...

    UE4 UI制作.docx

    UE4 UI 制作详解 UE4 是一款强大的游戏引擎,它提供了丰富的 UI 制作功能。在这篇文章中,我们将详细介绍如何使用 UE4 制作一个简单的 UI 界面。 新建蓝图类 Pawn 在 UE4 中,Pawn 是一个基本的 Actor,它可以被...

    网页制作UI

    网页制作UI是网页设计与开发过程中的重要环节,它涉及到用户与网站的交互方式和视觉体验。对于初学者来说,理解和掌握网页制作UI的基本概念、原则和技巧是至关重要的。 首先,我们需要理解“UI”(User Interface)...

    集成运放放大器实现Uo=2Ui1-3Ui2-5Ui3

    集成运算放大器(简称集成运放)可以通过适当配置电路来实现 Uo = 2Ui1 - 3Ui2 - 5Ui3 这样的输出与输入关系。由于一个单独的集成运放不能直接完成这种复杂的运算,通常需要使用多个运放以及电阻等元件来构建电路。 ...

    ios UI制作 扫雷 八种样式

    在iOS开发中,UI制作是至关重要的一环,它关乎到应用程序的用户体验和视觉吸引力。"ios UI制作 扫雷 八种样式"这个项目显然旨在通过实现扫雷小游戏来展示如何设计并构建多样化的用户界面。扫雷游戏,作为一个经典的...

    WOW UI制作入门

    WOW UI制作入门,比较简单的介绍了制作WOW UI的步骤及所需要的工具和知识,适合想做UI的初学者

    vc++制作DirectUI界面.windows DirectUI界面制作教程-这是目前网上能找到的最详细的教程了+源代码

    windows DirectUI界面制作教程-这是目前网上能找到的最详细的教程了+源代码 windows任务栏也是用此技术制作的 qq,微信,office,MSN的界面都是用此技术制作的

    UITree 目录树制作

    使用UGUI制作目录树结构,显示Scene视图中的层级目录。并有控制显隐的按钮。

    Unity DialogUI制作模板

    里面包含用UGUI制作对话框UI的预设体和代码,用来管理游戏中大量存在的弹框,处理之间的层级关系和触控屏蔽等操作

    Scoring UI的制作

    "Scoring UI的制作"这个主题聚焦于创建一个简单的UI排行榜,这是一个常见的功能,用于展示玩家在游戏中获得的成绩或者排名。UI设计不仅要考虑美观,还要注重用户体验,确保信息的清晰易读和操作的直观性。 Unity...

    好用的Extjs制作UI

    是一款配合.net使用的超级uI,可以通过拖住,实现UI的设计,不需要Ajax,,js,CSS.实现页面无刷新

    unity400+科技元素 科幻UI 机甲机械类UI

    Unity3D是一款强大的跨平台游戏开发引擎,广泛应用于游戏制作、虚拟现实(VR)和增强现实(AR)项目。在本资源中,“400+科技元素 科幻UI 机甲机械类UI”提供了丰富的设计素材,适用于创建富有科技感和未来气息的...

Global site tag (gtag.js) - Google Analytics