summaryrefslogtreecommitdiff
path: root/examples/pygtk-demo/demos/sizegroup.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/pygtk-demo/demos/sizegroup.py')
-rw-r--r--examples/pygtk-demo/demos/sizegroup.py108
1 files changed, 108 insertions, 0 deletions
diff --git a/examples/pygtk-demo/demos/sizegroup.py b/examples/pygtk-demo/demos/sizegroup.py
new file mode 100644
index 00000000..c40ce383
--- /dev/null
+++ b/examples/pygtk-demo/demos/sizegroup.py
@@ -0,0 +1,108 @@
+#!/usr/bin/env python
+"""Size Groups
+
+GtkSizeGroup provides a mechanism for grouping a number of widgets together so
+they all request the same amount of space. This is typically useful when you
+want a column of widgets to have the same size, but you can't use a GtkTable
+widget.
+
+Note that size groups only affect the amount of space requested, not the size
+that the widgets finally receive. If you want the widgets in a GtkSizeGroup to
+actually be the same size, you need to pack them in such a way that they get
+the size they request and not more. For example, if you are packing your
+widgets into a table, you would not include the GTK_FILL flag."""
+
+description = "Size Groups"
+
+import gtk
+
+def create_option_menu(options):
+ menu = gtk.Menu()
+ for str in options:
+ menu_item = gtk.MenuItem(str)
+ menu_item.show()
+ gtk.MenuShell.append(menu, menu_item)
+
+ option_menu = gtk.OptionMenu()
+ option_menu.set_menu(menu)
+
+ return option_menu
+
+def add_row(table, row, size_group, label_text, options):
+ label = gtk.Label(label_text)
+ label.set_use_underline(gtk.TRUE)
+ label.set_alignment(0, 1)
+ table.attach(label, 0, 1, row, row + 1, gtk.EXPAND + gtk.FILL, 0, 0, 0)
+
+ option_menu = create_option_menu(options)
+ label.set_mnemonic_widget(option_menu)
+ size_group.add_widget(option_menu)
+ table.attach(option_menu, 1, 2, row, row + 1, 0, 0, 0, 0)
+
+def toggle_grouping(check_button, size_group):
+ # gtk.SIZE_GROUP_NONE is not generally useful, but is useful
+ # here to show the effect of gtk.SIZE_GROUP_HORIZONTAL by
+ # contrast.
+ if check_button.get_active():
+ size_group.set_mode(gtk.SIZE_GROUP_HORIZONTAL)
+ else:
+ size_group.set_mode(gtk.SIZE_GROUP_NONE)
+
+def main():
+ color_options = ["Red", "Green", "Blue"]
+ dash_options = ["Solid", "Dashed", "Dotted"]
+ end_options = ["Square", "Round", "Arrow"]
+
+ window = gtk.Dialog("GtkSizeGroups", None, 0,
+ (gtk.STOCK_CLOSE, gtk.RESPONSE_NONE))
+ window.set_resizable(gtk.FALSE)
+ window.connect('response', lambda w, d: window.destroy())
+ if __name__ == '__main__':
+ window.connect('destroy', lambda win: gtk.main_quit())
+
+ vbox = gtk.VBox(gtk.FALSE, 5)
+ window.vbox.pack_start(vbox, gtk.TRUE, gtk.TRUE, 0)
+ vbox.set_border_width(5)
+
+ size_group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
+
+ # Create one frame holding color options
+
+ frame = gtk.Frame("Color options")
+ vbox.pack_start(frame, gtk.TRUE, gtk.TRUE, 0)
+
+ table = gtk.Table(2, 2, gtk.FALSE)
+ table.set_border_width(5)
+ table.set_row_spacings(5)
+ table.set_col_spacings(10)
+ frame.add(table)
+
+ add_row(table, 0, size_group, "_Foreground", color_options)
+ add_row(table, 1, size_group, "_Background", color_options)
+
+ # And another frame holding line style options
+
+ frame = gtk.Frame("Line options")
+ vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
+
+ table = gtk.Table(2, 2, gtk.FALSE)
+ table.set_border_width(5)
+ table.set_row_spacings(5)
+ table.set_col_spacings(10)
+ frame.add(table)
+
+ add_row(table, 0, size_group, "_Dashing", dash_options)
+ add_row(table, 1, size_group, "_Line ends", end_options)
+
+ # And a check button to turn grouping on and off
+
+ check_button = gtk.CheckButton("_Enable grouping")
+ vbox.pack_start(check_button, gtk.FALSE, gtk.FALSE, 0)
+ check_button.set_active(gtk.TRUE)
+ check_button.connect('toggled', toggle_grouping, size_group)
+
+ window.show_all()
+
+ if __name__ == '__main__': gtk.main()
+
+if __name__ == '__main__': main()