⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 13 - creating a gui application with ruby-gtk.rb

📁 O Reilly Ruby Cookbook source code
💻 RB
字号:
#!/usr/bin/ruby -w# gtktrout.rbrequire 'gtk2'Gtk.initwindow = Gtk::Window.new 'Tiny Ruby/GTK Application'label = Gtk::Label.new 'You are a trout!'window.add label window.signal_connect('destroy') { Gtk.main_quit }window.show_allGtk.main#---#!/usr/bin/ruby -w# gtk_stopwatch.rbrequire 'gtk2'class Stopwatch  LABEL_MARKUP = '<span font_desc="16" weight="bold">%s</span>'  def start    @accumulated ||= 0    @elapsed = 0    @start = Time.now    @mybutton.label = 'Stop'    set_button_handler('clicked') { stop }    @timer_stopped = false    @timer = Thread.new do       until @timer_stopped do        sleep(0.1)        tick unless @timer_stopped      end    end  end  def stop        @mybutton.label = 'Start'    set_button_handler('clicked') { start }    @timer_stopped = true    @accumulated += @elapsed  end    def reset    stop    @accumulated, @elapsed = 0, 0    @mylabel.set_markup(LABEL_MARKUP % '00:00:00.0')  end   def tick    @elapsed = Time.now - @start    time = @accumulated + @elapsed    h = sprintf('%02i', (time.to_i / 3600))    m = sprintf('%02i', ((time.to_i % 3600) / 60))    s = sprintf('%02i', (time.to_i % 60))    mt = sprintf('%1i', ((time - time.to_i)*10).to_i)    @mylabel.set_markup(LABEL_MARKUP % "#{h}:#{m}:#{s}:#{mt}")  end#---  def initialize    Gtk.init    root = Gtk::Window.new('GTK Stopwatch')    accel_group = Gtk::AccelGroup.new    root.add_accel_group(accel_group)    root.set_border_width 0    box = Gtk::VBox.new(false, 0)    root.add(box)#---    menu_factory = Gtk::ItemFactory.new(Gtk::ItemFactory::TYPE_MENU_BAR,                                        '<main>', nil)    menu_spec = [                    ['/_Program'],                  ['/Program/_Start', '<Item>', nil, nil, lambda { start } ],                  ['/Program/S_top', '<Item>', nil, nil, lambda { stop } ],                  ['/Program/_Exit', '<Item>', nil, nil,                    lambda { Gtk.main_quit } ],                 ['/_Reset'],                  ['/Reset/_Reset Stopwatch', '<Item>', nil, nil,                    lambda { reset } ]                ]    menu_factory.create_items(menu_spec)                    menu_root = menu_factory.get_widget('<main>')    box.pack_start(menu_root)#---    @mylabel = Gtk::Label.new     @mylabel.set_markup(LABEL_MARKUP % '00:00:00.0')    box.pack_start(@mylabel)    @mybutton = Gtk::Button.new('Start')    set_button_handler('clicked') { start }    box.pack_start(@mybutton)    root.signal_connect('destroy') { Gtk.main_quit }    root.show_all    Gtk.main  end#---  def set_button_handler(event, &block)    @mybutton.signal_handler_disconnect(@mybutton_handler) if @mybutton_handler    @mybutton_handler = @mybutton.signal_connect(event, &block)      endendStopwatch.new#---

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -