From: Victor Reyes Date: 2008-04-01T04:32:21+09:00 Subject: Re: Displaying gruff graphs ------=_Part_3426_408763.1206991939581 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline I finally got this working with wx by hard-coding the file path. The graphs (pie) is displayed, but now I have a small glitch, of course. The frame is a about 1/4 of what it needs to be, and so I have to resize it with the mouse. Perhaps I need to make the frame where the graph is displayed a bit larger. Is there anyway to make the size of the frame "dynamic" based on the size of the image to be displayed? In the mean time I will look in the wx documentation. Thank you Victor On 3/31/08, Victor Reyes wrote: > > Mark, thank you for your answer and time. > > Alex, this is exactly what I am looking for. I am trying to do two things > at > the same time: Learning Ruby well and second learning to use gruff so I > can > use it at work. > I copied your sample code where I incorporated the sample gruff code that > I > got from the web. When I run it, a wx frame flashes quickly and end. Some > errors are displayed on the screen. > Would you mind if I send you directly my piece of code? It is very very > simple. It only adds about five (5) lines to your sample code. > > Thank you for your help. > > Victor > > PS: The following are the errors: > C:\$user\vmr\Ruby>ruby rdg00.rb > c:/ruby/lib/ruby/gems/1.8/gems/gruff-0.3.1/lib/gruff/base.rb:465:in > `write': > no encode delegate for this image format `C:/DOCUME~1/REYESV~1 > :ImageMagickError) > from c:/ruby/lib/ruby/gems/1.8/gems/gruff-0.3.1 > /lib/gruff/base.rb:465:in > `write' > from rdg00.rb:25:in `on_paint' > from c:/ruby/lib/ruby/gems/1.8/gems/wxruby-1.9.5-i386-mswin32 > /lib/wx/classes/evthandler.rb:123:in > `call' > from c:/ruby/lib/ruby/gems/1.8/gems/wxruby-1.9.5-i386-mswin32 > /lib/wx/classes/evthandler.rb:123:in > `acquire_handler' > from c:/ruby/lib/ruby/gems/1.8/gems/wxruby-1.9.5-i386-mswin32 > /lib/wx/classes/window.rb:44:in > `call' > from c:/ruby/lib/ruby/gems/1.8/gems/wxruby-1.9.5-i386-mswin32 > /lib/wx/classes/window.rb:44:in > `evt_paint' > from c:/ruby/lib/ruby/gems/1.8/gems/wxruby-1.9.5-i386-mswin32 > /lib/wx/classes/app.rb:16:in > `call' > from c:/ruby/lib/ruby/gems/1.8/gems/wxruby-1.9.5-i386-mswin32 > /lib/wx/classes/app.rb:16:in > `process_event' > from c:/ruby/lib/ruby/gems/1.8/gems/wxruby-1.9.5-i386-mswin32 > /lib/wx/classes/app.rb:16:in > `main_loop' > from c:/ruby/lib/ruby/gems/1.8/gems/wxruby-1.9.5-i386-mswin32 > /lib/wx/classes/app.rb:16:in > `run' > from rdg00.rb:34 > > > On 3/31/08, Alex Fenton wrote: > > > > > Victor Reyes wrote: > > > > > Once a graph is written to disk, g.write("filename.png"), how can it > be > > > displayed in Ruby? > > > I would like to re-create the graph and re-displayed often enough to > > give > > > the appearance of "real time" > > > > > > It's not clear whether you meant via a browser or in a desktop app. If > > you want to show it on the desktop, you'll need some sort of GUI toolkit > > to display a window then draw the bitmap in it. > > > > You have a lot of choices: wxRuby, FXRuby, QT/Ruby, Tk, Ruby/GTK etc > > etc. They vary widely in suitability for different platforms, ease of > > installation, features, aesthetics. > > > > I use wxRuby b/c it's easy to install (gem install wxruby) and looks > > good on all the big platforms. A simple 25-line example that would > > regularly redraw an updated graph is below: > > > > hth > > alex > > __ > > require 'wx' > > require 'tempfile' > > > > # A frame that draws a regularly updated graph from Gruff every X > > millisecs > > class GruffFrame < Wx::Frame > > def initialize(refresh_delay = 5000) > > super(nil, :title => 'Gruff') > > Wx::Timer.every(refresh_delay) { refresh } > > evt_paint :on_paint > > end > > > > # Writes the gruff graph to a file then reads it back to draw it > > def on_paint > > # Set up your graph here > > graph = Gruff::Lines.new # .... > > # Write to a tempfile and read back > > tmp = Tempfile.new('gruff') > > graph.write(tmp.path) > > bmp = Wx::Bitmap.new(tmp.path, Wx::BITMAP_TYPE_PNG) > > # Draw it on the Frame > > paint do | dc | > > dc.draw_bitmap(bmp, 0, 0, false) > > end > > end > > end > > > > Wx::App.run { GruffFrame.new.show } > > > > > ------=_Part_3426_408763.1206991939581--