You are not logged in.

#1 2008-10-24 20:04:28

roger99
Member
Registered: 2008-09-14
Posts: 3

Simple Python / pygtk / libglade ? problem......

Hi,

I have decided to learn python as I have heard a lot of people reccomending it as a good simple language, powerful yet easy to pickup etc etc.  I have coded in C/C++, pascal & vb previously so am not new to programming as a whole.

I'm liking python so far but am having a basic (but annoying) problem displaying a gtk window using glade, pygtk etc.

I have built a simple interface using glade-3 and it is saved in gtk-builder format and I have the most basic of code to display the window and everytime I try to run it I get segmentation faults.  The following error occurs .......

./geany_run_script.sh: line 3:  6391 Segmentation fault      python "shoutradio.py"


------------------
(program exited with code: 139)
Press return to continue

Here are my two files.......

shoutradio.py:

#!/usr/bin/env python

import sys
try:
     import pygtk
      pygtk.require("2.0")
except:
      pass
try:
    import gtk
      import gtk.glade
except:
    sys.exit(1)

class ShoutCastMPD:
    
    def __init__(self):
        
        builder = gtk.Builder()
        builder.add_from_file("shoutWindow.glade") 
        
        self.Window = builder.get_object("window1")
        self.AlbumArt = builder.get_object("AlbumArt")
        self.TrackSlider = builder.get_object("TrackSlider")
        self.VolumeSlider = builder.get_object("VolumeSlider")
        self.PlaylistView = builder.get_object("PlaylistView")
        self.PlaylistToolbar = builder.get_object("PlaylistToolbar")
        self.Tabs = builder.get_object("tabs")
        self.ShoutcastView = builder.get_object("ShoutCastView")
        self.VolumeSlider = builder.get_object("ShoutcastToolbar")
        self.VolumeSlider = builder.get_object("Statusbar")
        
        builder.connect_signals(self) 

if __name__ == "__main__":
    frontend = ShoutCastMPD()
    frontend.Window.show()
    gtk.main()

shoutWindow.glade:

<?xml version="1.0"?>
<interface>
  <requires lib="gtk+" version="2.12"/>
  <object class="GtkWindow" id="window1">
    <property name="visible">True</property>
    <property name="window_position">GTK_WIN_POS_CENTER</property>
    <child>
      <object class="GtkVBox" id="vbox1">
        <property name="visible">True</property>
        <child>
          <object class="GtkHBox" id="hbox1">
            <property name="visible">True</property>
            <property name="spacing">5</property>
            <child>
              <object class="GtkImage" id="AlbumArt">
                <property name="width_request">125</property>
                <property name="height_request">125</property>
                <property name="visible">True</property>
                <property name="pixbuf">125x125.png</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">False</property>
                <property name="padding">7</property>
              </packing>
            </child>
            <child>
              <object class="GtkVBox" id="vbox2">
                <property name="visible">True</property>
                <child>
                  <object class="GtkLabel" id="label7">
                    <property name="visible">True</property>
                    <property name="label" translatable="yes">label</property>
                  </object>
                </child>
                <child>
                  <object class="GtkLabel" id="label8">
                    <property name="visible">True</property>
                    <property name="label" translatable="yes">label</property>
                  </object>
                  <packing>
                    <property name="position">1</property>
                  </packing>
                </child>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="position">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkVBox" id="vbox3">
                <property name="visible">True</property>
                <child>
                  <object class="GtkLabel" id="label9">
                    <property name="visible">True</property>
                    <property name="label" translatable="yes">label</property>
                  </object>
                </child>
                <child>
                  <object class="GtkLabel" id="label10">
                    <property name="visible">True</property>
                    <property name="label" translatable="yes">label</property>
                  </object>
                  <packing>
                    <property name="position">1</property>
                  </packing>
                </child>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">False</property>
                <property name="position">2</property>
              </packing>
            </child>
            <child>
              <object class="GtkVBox" id="vbox4">
                <property name="visible">True</property>
                <child>
                  <object class="GtkLabel" id="label12">
                    <property name="visible">True</property>
                    <property name="label" translatable="yes">label</property>
                  </object>
                </child>
                <child>
                  <object class="GtkLabel" id="label11">
                    <property name="visible">True</property>
                    <property name="label" translatable="yes">label</property>
                  </object>
                  <packing>
                    <property name="position">1</property>
                  </packing>
                </child>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">False</property>
                <property name="position">3</property>
              </packing>
            </child>
            <child>
              <object class="GtkVBox" id="vbox5">
                <property name="visible">True</property>
                <child>
                  <object class="GtkLabel" id="label13">
                    <property name="visible">True</property>
                    <property name="label" translatable="yes">label</property>
                  </object>
                </child>
                <child>
                  <object class="GtkHScale" id="TrackSlider">
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="no_show_all">True</property>
                    <property name="adjustment">0 0 100 1 10 10</property>
                    <property name="digits">0</property>
                    <property name="draw_value">False</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="padding">2</property>
                    <property name="position">1</property>
                  </packing>
                </child>
              </object>
              <packing>
                <property name="padding">2</property>
                <property name="position">4</property>
              </packing>
            </child>
            <child>
              <object class="GtkVScale" id="VolumeSlider">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="adjustment">0 0 100 1 10 10</property>
                <property name="inverted">True</property>
                <property name="draw_value">False</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="position">5</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="padding">5</property>
          </packing>
        </child>
        <child>
          <object class="GtkExpander" id="expander">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <child>
              <object class="GtkVBox" id="vbox6">
                <property name="visible">True</property>
                <child>
                  <object class="GtkHPaned" id="hpaned1">
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <child>
                      <object class="GtkVBox" id="vbox7">
                        <property name="visible">True</property>
                        <child>
                          <object class="GtkAccelLabel" id="Label1">
                            <property name="visible">True</property>
                            <property name="label" translatable="yes">Current Playlist</property>
                          </object>
                          <packing>
                            <property name="expand">False</property>
                            <property name="padding">7</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkTreeView" id="PlaylistView">
                            <property name="visible">True</property>
                            <property name="can_focus">True</property>
                          </object>
                          <packing>
                            <property name="position">1</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkToolbar" id="PlaylistToolbar">
                            <property name="visible">True</property>
                            <child>
                              <object class="GtkToolButton" id="ClearPlaylistButton">
                                <property name="visible">True</property>
                                <property name="stock_id">gtk-cancel</property>
                              </object>
                              <packing>
                                <property name="homogeneous">True</property>
                              </packing>
                            </child>
                          </object>
                          <packing>
                            <property name="expand">False</property>
                            <property name="position">2</property>
                          </packing>
                        </child>
                      </object>
                      <packing>
                        <property name="resize">False</property>
                        <property name="shrink">True</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkNotebook" id="tabs">
                        <property name="visible">True</property>
                        <property name="can_focus">True</property>
                        <child>
                          <object class="GtkVBox" id="vbox8">
                            <property name="visible">True</property>
                            <child>
                              <object class="GtkLabel" id="label14">
                                <property name="visible">True</property>
                                <property name="label" translatable="yes">label</property>
                              </object>
                            </child>
                            <child>
                              <object class="GtkLabel" id="label15">
                                <property name="visible">True</property>
                                <property name="label" translatable="yes">label</property>
                              </object>
                              <packing>
                                <property name="position">1</property>
                              </packing>
                            </child>
                          </object>
                        </child>
                        <child type="tab">
                          <object class="GtkLabel" id="label2">
                            <property name="visible">True</property>
                            <property name="label" translatable="yes">Library</property>
                          </object>
                          <packing>
                            <property name="tab_fill">False</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkVBox" id="vbox9">
                            <property name="visible">True</property>
                            <child>
                              <object class="GtkHBox" id="hbox2">
                                <property name="visible">True</property>
                                <child>
                                  <object class="GtkLabel" id="label6">
                                    <property name="height_request">30</property>
                                    <property name="visible">True</property>
                                    <property name="label" translatable="yes">Select A ShoutCast Genre</property>
                                    <property name="justify">GTK_JUSTIFY_RIGHT</property>
                                  </object>
                                  <packing>
                                    <property name="expand">False</property>
                                    <property name="padding">24</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBox" id="combobox1">
                                    <property name="visible">True</property>
                                  </object>
                                  <packing>
                                    <property name="position">1</property>
                                  </packing>
                                </child>
                              </object>
                              <packing>
                                <property name="expand">False</property>
                              </packing>
                            </child>
                            <child>
                              <object class="GtkTreeView" id="ShoutCastView">
                                <property name="visible">True</property>
                                <property name="can_focus">True</property>
                              </object>
                              <packing>
                                <property name="position">1</property>
                              </packing>
                            </child>
                            <child>
                              <object class="GtkToolbar" id="ShoutcastToolbar">
                                <property name="visible">True</property>
                                <child>
                                  <object class="GtkToolButton" id="ShoutPlayButton">
                                    <property name="visible">True</property>
                                    <property name="stock_id">gtk-media-play</property>
                                  </object>
                                  <packing>
                                    <property name="homogeneous">True</property>
                                  </packing>
                                </child>
                              </object>
                              <packing>
                                <property name="expand">False</property>
                                <property name="position">2</property>
                              </packing>
                            </child>
                          </object>
                          <packing>
                            <property name="position">1</property>
                          </packing>
                        </child>
                        <child type="tab">
                          <object class="GtkLabel" id="label3">
                            <property name="visible">True</property>
                            <property name="label" translatable="yes">ShoutCast</property>
                          </object>
                          <packing>
                            <property name="position">1</property>
                            <property name="tab_fill">False</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkLabel" id="label16">
                            <property name="visible">True</property>
                            <property name="label" translatable="yes">label</property>
                          </object>
                          <packing>
                            <property name="position">2</property>
                          </packing>
                        </child>
                        <child type="tab">
                          <object class="GtkLabel" id="label4">
                            <property name="visible">True</property>
                            <property name="label" translatable="yes">Track Information</property>
                          </object>
                          <packing>
                            <property name="position">2</property>
                            <property name="tab_fill">False</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkLabel" id="label17">
                            <property name="visible">True</property>
                            <property name="label" translatable="yes">label</property>
                          </object>
                          <packing>
                            <property name="position">3</property>
                          </packing>
                        </child>
                        <child type="tab">
                          <object class="GtkLabel" id="label5">
                            <property name="visible">True</property>
                            <property name="label" translatable="yes">Options</property>
                          </object>
                          <packing>
                            <property name="position">3</property>
                            <property name="tab_fill">False</property>
                          </packing>
                        </child>
                      </object>
                      <packing>
                        <property name="resize">True</property>
                        <property name="shrink">True</property>
                      </packing>
                    </child>
                  </object>
                </child>
                <child>
                  <object class="GtkStatusbar" id="Statusbar">
                    <property name="visible">True</property>
                    <property name="spacing">2</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="position">1</property>
                  </packing>
                </child>
              </object>
            </child>
            <child type="label_item">
              <object class="GtkLabel" id="label1">
                <property name="visible">True</property>
                <property name="label" translatable="yes">Extra Features
Click To Expand</property>
                <property name="use_markup">True</property>
                <property name="use_underline">True</property>
                <property name="justify">GTK_JUSTIFY_CENTER</property>
              </object>
            </child>
          </object>
          <packing>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

If someone could help me out here it would be most appreciated, its probably some really silly thing i've done somewhere along the line in glade-3 or something but I can't figure out what and it's starting to bug me sad

Cheers in advance.

Offline

#2 2008-10-27 13:58:39

roger99
Member
Registered: 2008-09-14
Posts: 3

Re: Simple Python / pygtk / libglade ? problem......

OK so I solved this problem the other day, should of posted back here earlier I suppose but seeing as no-one has replied supppose it aint that important.....

The item causing the segfaults was the label on the expander.  The moment I took it out all was well again, does anybody else experience this when using glade-3 and pygtk?

The same thing happens if you put a frame into the gui design, the frame gets a label by default, but python segfaults as soon as it loads the glade xml file.

Does anybody else experience this, is this a known bug in python / pygtk / glade, is it something I could bug report.

Other than these minor niggles with gui design pythons great, only been using it for a few days and allready have a pretty functional MPD client (cue groan from community and .... Oh no, not another one wink )

Offline

Board footer

Powered by FluxBB