Posts tagged with glade

Creating Linux Applications Using PyGTK

September 30th, 2008

I’ve looked at using python to create GUIs in Linux a few times but coming from a background of using Visual Basic it seemed very different and the learning curve a bit steep. This time I decided to really give it a new try and I have to say that it’s way easier than I expected.

My first recommendation is to use glade-3. Last time I used glade-2 but I have a real problem with the multiple windows concept as windows keep disappearing behind other application windows. If you use gtk.Builder then the glade file created by glade-3 needs to be converted to a compatible xml file before it can be loaded, but this is easy to achieve with the following command.

$ gtk-builder-convert gui.glade gui.xml

From there I was amazed how easy it was to attach events and quickly write code, a very basic example to load an xml file an attach events is shown here.

This is the xml file created by using glade and running gtk-builder-convert. It’s just a window containing a button.

<?xml version="1.0"?>
<!--Generated with glade3 3.4.4 on Tue Sep 30 11:46:18 2008 -->
<interface>
  <object class="GtkWindow" id="window1">
    <signal handler="on_window1_destroy" name="destroy"/>
    <child>
      <object class="GtkButton" id="button1">
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">True</property>
        <property name="label" translatable="yes">gtk-close</property>
        <property name="use_stock">True</property>
        <signal handler="on_button1_clicked" name="clicked"/>
      </object>
    </child>
  </object>
</interface>

This is the python code to run the gui, very simple indeed.

#!/usr/bin/env python 

import pygtk
import gtk
pygtk.require("2.0") 

class GUI(object):
  def __init__(self):
      builder = gtk.Builder()
      builder.add_from_file("GUI.xml")
      builder.connect_signals(self)
      self.window1 = builder.get_object("window1")
      self.window1.show()

  def on_window1_destroy(self,widget,data=None):
      gtk.main_quit()

  def on_button1_clicked(self,widget,data=None):
      gtk.main_quit()  

if __name__ == "__main__":
  app = GUI()
  gtk.main()

To run just save the python file as gui.py, chmod +x the python file and then run using ./gui.py. Just make sure the xml file is in the same directory as the python file.

I’ll post more pygtk as I learn but so far I’m amazed how easy it is to create very professional looking applications in a very short time. There are thousands of tutorials on pygtk on the net but I found this one very useful.

http://www.micahcarrick.com/12-24-2007/gtk-glade-tutorial-part-1.html