# Gui Builders for Ruby

**URL:** <https://www.ruby-forum.com/t/gui-builders-for-ruby/87471>\
**Category:** Ruby\
**Created:** [March 2, 2007, 8:12pm UTC](https://www.ruby-forum.com/t/gui-builders-for-ruby/87471 "2007-03-02T20:12:13Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![kyle\_s](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f6c823/32.png) [@kyle\_s](https://www.ruby-forum.com/u/kyle_s)\
**Post date:** [March 2, 2007, 8:12pm UTC](https://www.ruby-forum.com/t/gui-builders-for-ruby/87471/1 "2007-03-02T20:12:13Z")

</div>

This maybe a bit off topic, and is really more of a discussion question  
but…

Are there GUI builders for Ruby that allow one to truly divorce the  
GUI from the logic? Reading the tutorials for the GUI toolkits, and  
the tutorial for foxguib, it appears the idea is make you GUI, then  
have your classes inherit the GUI class. Or worse, embed the GUI code  
directly into your classes.

I suppose one good question would be the _right_ way to to make GUIs  
for ruby scripts. Really just inheriting the GUI class, making a  
separate gui and worker object and glue code between them?

Admittedly I maybe looking at these tookits a bit naively as I’m just  
now writing some front ends to my utility scripts that use on a day in  
and day out basis.

Thanks for any suggestions or comments.  
–Kyle

---

<div class="post-metadata">

**Author:** ![kyle\_s](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f6c823/32.png) [@kyle\_s](https://www.ruby-forum.com/u/kyle_s)\
**Post date:** [March 3, 2007, 2:01pm UTC](https://www.ruby-forum.com/t/gui-builders-for-ruby/87471/2 "2007-03-03T14:01:43Z")

</div>

Have a look at Glade (ruby-libglade2).  
With glade you can draw your GUI and produce an xml file. Your ruby  
program  
then loads it and connect code to the handlers. That should faily  
divorce the  
gui and logic but I think you are limited to GTK+ and Gnome elements and  
I am  
unsure how portable an application can be.

Here are some examples:  
[http://ruby-gnome2.sourceforge.jp/hiki.cgi?Samples](http://ruby-gnome2.sourceforge.jp/hiki.cgi?Samples)

…and this is a very nice program using it:  
[http://www.grism.org/](http://www.grism.org/)

martin

---

<div class="post-metadata">

**Author:** ![kyle\_s](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f6c823/32.png) [@kyle\_s](https://www.ruby-forum.com/u/kyle_s)\
**Post date:** [March 3, 2007, 6:49pm UTC](https://www.ruby-forum.com/t/gui-builders-for-ruby/87471/3 "2007-03-03T18:49:28Z")

</div>

Kyle S. wrote:

> Reading the tutorials for the GUI toolkits, and  
> the tutorial for foxguib, it appears the idea is make you GUI, then  
> have your classes inherit the GUI class.

I’d presume it looks so scary because doing a layered design is outside  
of the scope of those tutorials.

Usually in my Qt code, I inherit from the GUI class into a class that  
only handles the mapping of low-level GUI events into a separate layer  
of logic actions. This gives you an extra level of indirection that lets  
you reuse the same UI code for let’s say a form-input and a read-only  
variant of the same GUI, but there’s nothing forcing you to put -all-  
your logic into that layer. (It’s just much simpler in introductory  
tutorials - you have to admit that a clean, layered design usually takes  
a while to wrap your head around.)

David V.

---

<div class="post-metadata">

**Author:** ![kyle\_s](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f6c823/32.png) [@kyle\_s](https://www.ruby-forum.com/u/kyle_s)\
**Post date:** [March 4, 2007, 10:20pm UTC](https://www.ruby-forum.com/t/gui-builders-for-ruby/87471/4 "2007-03-04T22:20:50Z")

</div>

Kyle S. wrote:

> Are there GUI builders for Ruby that allow one to truly divorce the  
> GUI from the logic?

With wxRuby you can use any of a number of free and commercial designers  
and save the results as XRC. It’s an XML format describing the layout;  
you load it in Ruby and hook up the event handling etc logic there. It’s  
a similar idea to Glade, except it gives you native widgets on Windows  
and OS X.

> **[wxWidgets](https://en.wikipedia.org/wiki/WxWidgets#IDE_and_RAD_tools)**
>
> wxWidgets (formerly wxWindows) is a widget toolkit and tools library for creating graphical user interfaces (GUIs) for cross-platform applications. wxWidgets enables a program's GUI code to compile and run on several computer platforms with minimal or no code changes. A wide choice of compilers and other tools to use with wxWidgets facilitates development of sophisticated applications. wxWidgets supports a comprehensive range of popular operating systems and graphical libraries, both proprieta Th...

> I suppose one good question would be the _right_ way to to make GUIs  
> for ruby scripts. Really just inheriting the GUI class, making a  
> separate gui and worker object and glue code between them?

I doubt there’s one right way. Having a well thought-out set of  
application classes is a good start; unit tests can help. Beyond that  
strictly separating GUI layout from event handling (eg by XRC) is one  
strategy. But with Ruby’s concise, adaptable syntax and mix-ins, writing  
GUI programs using just inheritance and pure ruby is worth considering.  
But current GUI libraries tend to betray their C/C++ derivation so GUI  
layout code in Ruby still ends up looking clunky.

[http://wxruby.rubyforge.org/wiki/wiki.pl?WxSugar](http://wxruby.rubyforge.org/wiki/wiki.pl?WxSugar)

alex

---

<div class="post-metadata">

**Author:** ![kyle\_s](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f6c823/32.png) [@kyle\_s](https://www.ruby-forum.com/u/kyle_s)\
**Post date:** [March 4, 2007, 1:04pm UTC](https://www.ruby-forum.com/t/gui-builders-for-ruby/87471/5 "2007-03-04T13:04:51Z")

</div>

On 3/2/07, Kyle S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> This maybe a bit off topic, and is really more of a discussion question but…
> 
> Are there GUI builders for Ruby that allow one to truly divorce the  
> GUI from the logic? Reading the tutorials for the GUI toolkits, and  
> the tutorial for foxguib, it appears the idea is make you GUI, then  
> have your classes inherit the GUI class. Or worse, embed the GUI code  
> directly into your classes.

hi kyle,  
the foxGUIb docs don’t suggest that the application logic classes  
inherit from the GUI classes! It suggests to extend the GUI class in a  
subclass or a seperate file by using Ruby’s class extension mechanism  
to seperate manual GUI related code from autogenerated code. Whether  
you stuff your app’s code into the gui class or not is left to you.

best practice is like this:

## mydialog\_guib.rb

class MyDialog # generated by foxGUIb  
end

## mydiaog.rb

class MyDialog \< MyDialog  
#connect some event handlers to bind widgets together …

# provide events for the application via Observer Pattern

end

## application.rb

# use MyDialog here

what you need to do to cleanly decouple gui and application is to use  
the observer pattern. there is a neat implementation of the Observer  
Pattern in RAA: Observable by Joel Vanderwarf

hope this helps,  
– meinrad recheis
