On 6/06/2010 11:39 AM, Lang Hurst wrote:
I'm trying to create an incredibly simple application just to learn gui
programming, but I can't see how to work with radio buttons.
Attached find a simple application that uses radio buttons.
tested on windows XP with
Python version 2.6.3
GTK+ version 2.16.6
pyGTK version 2.12.1
gobject version 2.14.2
cairo version 1.4.12
Used Glade 3.6.1
Hope it works for you and helps answer some of your questions, feel free
to ask questions.
Good luck
- Steve
(lets see if attachments get through)
<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="winapp">
<signal name="destroy" handler="on_winapp_destroy"/>
<child>
<object class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="spacing">2</property>
<child>
<object class="GtkVButtonBox" id="vbuttonbox1">
<property name="visible">True</property>
<property name="layout_style">spread</property>
<child>
<object class="GtkRadioButton" id="red_rbtn">
<property name="label" translatable="yes">Red</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="yalign">0.50999999046325684</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_red_rbtn_toggled"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="blue_rbtn">
<property name="label" translatable="yes">Blue</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">red_rbtn</property>
<signal name="toggled" handler="on_blue_rbtn_toggled"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="green_rbtn">
<property name="label" translatable="yes">Green</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">red_rbtn</property>
<signal name="toggled" handler="on_green_rbtn_toggled"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="yellow_rbtn">
<property name="label" translatable="yes">Yellow</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">red_rbtn</property>
<signal name="toggled" handler="on_yellow_rbtn_toggled"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="label_xalign">0</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="left_padding">12</property>
<child>
<object class="GtkLabel" id="color_lbl">
<property name="visible">True</property>
<property name="label" translatable="yes">Unknown</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkCheckButton" id="showoutput_btn">
<property name="label" translatable="yes">Show Color Choice</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_showoutput_btn_toggled"/>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">5</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">5</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
try:
print 'Trying import pygtk',
import pygtk
print '...OK'
print 'Trying version(2.0)',
pygtk.require("2.0")
print '...success'
except:
print '...failure'
try:
print 'Trying import gtk',
import gtk
import gobject
print '...success'
except:
print '...failure'
sys.exit(1)
print
import pango
class appGUI(gobject.GObject):
def __init__(self):
gobject.GObject.__init__(self)
self.builder = gtk.Builder()
self.builder.add_from_file('buttons.glade')
self.window = self.builder.get_object('winapp')
self.color_lbl = self.builder.get_object('color_lbl')
self.builder.connect_signals(self)
fontdesc = pango.FontDescription("Sans 20")
self.color_lbl.modify_font(fontdesc)
self.color_lookup = {
'red': gtk.gdk.Color(red=65535),
'blue': gtk.gdk.Color(blue=65535),
'green': gtk.gdk.Color(green=65535),
'yellow': gtk.gdk.color_parse('yellow')
}
self.on_showoutput_btn_toggled(self.builder.get_object('showoutput_btn'))
def on_winapp_destroy(self, widget, data=None):
'''When our window is destroyed, we want to break out of the GTK main loop.
We do this by calling gtk_main_quit()'''
# do other things here upon close down?
gtk.main_quit()
def print_radiobutton_state(self, widget):
if widget.get_active():
state = 'active'
if self.builder.get_object('showoutput_btn').get_active():
self.set_color_label(widget.get_label())
else:
self.color_lbl.set_label('Unknown')
else:
state = 'inactive'
print ' %s button toggled - now %s ' % ( widget.get_label(), state)
def on_red_rbtn_toggled(self, widget, data=None):
print 'on_red_rbtn_toggled'
self.print_radiobutton_state(widget)
def on_blue_rbtn_toggled(self, widget, data=None):
print 'on_blue_rbtn_toggled'
self.print_radiobutton_state(widget)
def on_green_rbtn_toggled(self, widget, data=None):
print 'on_green_rbtn_toggled'
self.print_radiobutton_state(widget)
def on_yellow_rbtn_toggled(self, widget, data=None):
print 'on_yellow_rbtn_toggled'
self.print_radiobutton_state(widget)
def on_showoutput_btn_toggled(self, widget, data=None):
if widget.get_active():
self.color_lbl.set_sensitive(True)
else:
self.color_lbl.set_sensitive(False)
def set_color_label(self, color):
self.color_lbl.set_label(color)
mycolor = self.color_lookup[color.lower()]
self.color_lbl.modify_fg(gtk.STATE_NORMAL, mycolor)
# Run main application window
def main(self):
self.window.show()
gtk.main()
gobject.type_register(appGUI)
if __name__ == "__main__":
app = appGUI()
app.main()
_______________________________________________
pygtk mailing list [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/