ステップアップ
今度はマウスのクリックで終了するようにしてみよう。
また右上の×印を押すと終了するようにする
スクリーンショット
sample2.rb
-- sample2.rb ここから --
require "gtk"
require "narray"
require "numru/dcl"
require "numru/gdcl"
include NumRu
include Math
NMAX = 400
$pixmap = nil
def expose_event(widget, draw)
  if ! $pixmap.nil?
    area = draw.area
    gc = widget.style.fg_gc(widget.state)
    widget.window.draw_pixmap(gc, $pixmap, area.x, area.y,
			     area.x, area.y, area.width, area.height)
  end
  false
end
def configure_event(widget)
  geom = widget.window.get_geometry
  if (geom[2]>0 && geom[3]>0) then
    $pixmap = Gdk::Pixmap.new(widget.window, geom[2], geom[3], -1)
    $pixmap.draw_rectangle(widget.style.white_gc, true, 0, 0, geom[2], geom[3])
  end
  GDCL::zgsdrw(widget)
  DCL::sgopn(4)
  GDCL::zgspmp($pixmap)
  draw_graph
  true
end
def draw_graph
  x = NArray.new(NArray::FLOAT, NMAX)
  y = NArray.new(NArray::FLOAT, NMAX)
  dt = 2.*3.14159/(NMAX-1)
  for n in 0..NMAX-1
    t = dt*n
    x[n]=100. * sin(4.*t)
    y[n]=0.001*cos(5.*t) + 6.0
  end
  DCL::grfrm
  DCL::ussttl("X-TITLE", "x-unit", "Y-TITLE", "y-unit")
  DCL::usgrph(NMAX, x, y)
end
draw_area = Gtk::DrawingArea.new
draw_area.size(300, 200)
draw_area.signal_connect("expose_event"){|w,p| expose_event(w,p)}
draw_area.signal_connect("configure_event"){|w,p| configure_event(w)}
draw_area.signal_connect("button_press_event"){exit}
draw_area.add_events(Gdk::BUTTON_PRESS_MASK)
draw_area.show
window = Gtk::Window.new(Gtk::WINDOW_TOPLEVEL)
window.signal_connect("delete_event"){exit}
window.signal_connect("destroy_event"){exit}
window.set_title("sample2.rb")
window.add(draw_area)
window.show
Gtk::main
-- sample2.rb ここまで --
解説
     draw_area.size(300, 200)
     
 マウスでクリックすると終了する
          
     draw_area.signal_connect("button_press_event"){exit}
     draw_area.add_events(Gdk::BUTTON_PRESS_MASK)
     
     Gtk::DrawingArea は
     デフォルトではマウスのイベントを発生させないので
     加えてやる必要がある
 "delete_event","destroy_event"イベントがおこれば終了する
     
     window.signal_connect("delete_event"){exit}
     window.signal_connect("destroy_event"){exit}
     
主な変数及びイベント
イベント
| "button_press_event" | 
マウスとクリックした時に生じる | 
| "delete_event": | 
窓の右上の×印を押したりしたときに生じる | 
| "destroy_event": | 
  説明省 | 
こんどはマウスでクリックすると終了するようになった。
ウインドウマネージャーの機能で窓を消す(たとえば右上の×印を押す)と
ちゃんと終了するはずである。
戻る
次へ
go back