Sunday, June 17, 2012

Glade

This one for the Systems Programmers out there:

Years ago, Glade was a GUI editor for C users only, a lot like MFC/Java.  Well a few years back, it became Python friendly too, but who uses Python?  As of recently, I now use Python- that's who!  So, I began to wonder about Glade all over again, and my oh my how it's changed.

Back in the bad old days Glade made a make file, and a buncho support files for C and Gtk use.  It was what is best described as a mess.  You'd look at it and say; ok, it's somewhat useful.  Now however, Glade does all the same things in drawing a GUI interface from the basic widgets of Gtk, but now they are packed neatly into an XML file.  This XML file is then processed by your programming language, to setup your form design widgets.  And that's what so forkin neat about it.  Now your code can share dialog boxes, like the idea of common dialog boxes in Windows.  How cool is that?  So you could Prototype in Python, and then Compile Binary in C later, for better speed.  Woohoo!

But making your application from Glade work, is like the worsted described mystery in all Linux programming.  There are two complications here;  First, GtkBuilder vs. Libglade.  And Libglade is already obsolete, however it's what 90% of the tutorials on the Internet use.  Second, the PyGtk tells you there are OnButtonClicked events predefined, which really doesn't tell you how to use a menu item, or what these predefined names are... 

Like everything in the Gtk, you'd better have some crib-notes close by.  So understand that in the Gtk, unlike everywhere else, a menu is activated, as a button is clicked.  Everywhere else, a menu is nothing more than a button.  So the events are 'activate' and 'clicked', and finding those in the Signals controls is not very hard, but now we have to deal with the trick of Libglade vs GtkBuilder.  When Gtk said it was predefined, they meant IN GtkBuilder only!  Again, most of the tutorials are in Libglade, which is where it all comes off the rails.  Finding those predefined names isn't so hard, once your using GtkBuilder- they are the first event option in the list.

What really going to change though is the start up.  Here's a basic Python file, that has both (Libglade commented out).
#!/usr/bin/env python

import sys
try:
     import pygtk
      pygtk.require("2.0")
except:
      pass
try:
    import gtk
      import gtk.glade
except:
    print "Glade/Gtk failure!"
    sys.exit(1)

class RawTemplate:
    """
    The RAWTemplate class
    RAW stands for nothing, this is just a skeleton class to      create GTK
    applications quickly with common dialogs already in place ready to go.
    (THIS RAW has been altered for use with Glade)
   
    Program requires the following set:
     
    """
    #--------------------------------------------------
    def __init__(self):
        self.gladefile = "./booger.glade" 
        builder = gtk.Builder()
        builder.add_from_file(self.gladefile)
        self.window = builder.get_object("window1")

        # self.wTree = gtk.glade.XML(self.gladefile)
        # self.window = self.wTree.get_widget("window1")
        if (self.window):
            self.window.connect("destroy", gtk.main_quit)
        self.window.show_all()


if __name__ == "__main__":
    RawTemplate()
    gtk.main()


***Pardon the scrolling, if you copy/paste this into a text editor, it works fine.  I can't find the good old BLOCKQUOTE in this Blogger editor, so it's messing the python code up.

Anyway, this article was not intended as a tutorial, only as comment on the mystery statements made by all the tutorials out there.  Once most of you are brighter than me, you shouldn't have any problem with this.


No comments:

Post a Comment