|
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17 System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64 User : nobody ( 99) PHP Version : 5.2.17 Disable Function : NONE Directory : /proc/21585/root/usr/lib64/pygtk/2.0/demos/ |
Upload File : |
#!/usr/bin/env python
'''Application main window
Demonstrates a typical application window, with menubar, toolbar, statusbar.'''
# pygtk version: Maik Hertha <maik.hertha@berlin.de>
import gobject
import gtk
(
COLOR_RED,
COLOR_GREEN,
COLOR_BLUE
) = range(3)
(
SHAPE_SQUARE,
SHAPE_RECTANGLE,
SHAPE_OVAL,
) = range(3)
ui_info = \
'''<ui>
<menubar name='MenuBar'>
<menu action='FileMenu'>
<menuitem action='New'/>
<menuitem action='Open'/>
<menuitem action='Save'/>
<menuitem action='SaveAs'/>
<separator/>
<menuitem action='Quit'/>
</menu>
<menu action='PreferencesMenu'>
<menu action='ColorMenu'>
<menuitem action='Red'/>
<menuitem action='Green'/>
<menuitem action='Blue'/>
</menu>
<menu action='ShapeMenu'>
<menuitem action='Square'/>
<menuitem action='Rectangle'/>
<menuitem action='Oval'/>
</menu>
<menuitem action='Bold'/>
</menu>
<menu action='HelpMenu'>
<menuitem action='About'/>
</menu>
</menubar>
<toolbar name='ToolBar'>
<toolitem action='Open'/>
<toolitem action='Quit'/>
<separator/>
<toolitem action='Logo'/>
</toolbar>
</ui>'''
# It's totally optional to do this, you could just manually insert icons
# and have them not be themeable, especially if you never expect people
# to theme your app.
def register_stock_icons():
''' This function registers our custom toolbar icons, so they
can be themed.
'''
items = [('demo-gtk-logo', '_GTK!', 0, 0, '')]
# Register our stock items
gtk.stock_add(items)
# Add our custom icon factory to the list of defaults
factory = gtk.IconFactory()
factory.add_default()
import os
img_dir = os.path.join(os.path.dirname(__file__), 'images')
img_path = os.path.join(img_dir, 'gtk-logo-rgb.gif')
try:
pixbuf = gtk.gdk.pixbuf_new_from_file(img_path)
# Register icon to accompany stock item
# The gtk-logo-rgb icon has a white background, make it transparent
# the call is wrapped to (gboolean, guchar, guchar, guchar)
transparent = pixbuf.add_alpha(True, chr(255), chr(255),chr(255))
icon_set = gtk.IconSet(transparent)
factory.add('demo-gtk-logo', icon_set)
except gobject.GError, error:
print 'failed to load GTK logo for toolbar'
class ApplicationMainWindowDemo(gtk.Window):
def __init__(self, parent=None):
register_stock_icons()
# Create the toplevel window
gtk.Window.__init__(self)
try:
self.set_screen(parent.get_screen())
except AttributeError:
self.connect('destroy', lambda *w: gtk.main_quit())
self.set_title(self.__class__.__name__)
self.set_default_size(200, 200)
merge = gtk.UIManager()
self.set_data("ui-manager", merge)
merge.insert_action_group(self.__create_action_group(), 0)
self.add_accel_group(merge.get_accel_group())
try:
mergeid = merge.add_ui_from_string(ui_info)
except gobject.GError, msg:
print "building menus failed: %s" % msg
bar = merge.get_widget("/MenuBar")
bar.show()
table = gtk.Table(1, 4, False)
self.add(table)
table.attach(bar,
# X direction # # Y direction
0, 1, 0, 1,
gtk.EXPAND | gtk.FILL, 0,
0, 0);
bar = merge.get_widget("/ToolBar")
bar.set_tooltips(True)
bar.show()
table.attach(bar,
# X direction # # Y direction
0, 1, 1, 2,
gtk.EXPAND | gtk.FILL, 0,
0, 0)
# Create document
sw = gtk.ScrolledWindow()
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
sw.set_shadow_type(gtk.SHADOW_IN)
table.attach(sw,
# X direction Y direction
0, 1, 2, 3,
gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL,
0, 0)
contents = gtk.TextView()
contents.grab_focus()
sw.add (contents)
# Create statusbar
self.statusbar = gtk.Statusbar()
table.attach(self.statusbar,
# X direction Y direction
0, 1, 3, 4,
gtk.EXPAND | gtk.FILL, 0,
0, 0)
# Show text widget info in the statusbar
buffer = contents.get_buffer()
buffer.connect("changed", self.update_statusbar)
mark_set_callback = (lambda buffer, new_location, mark:
self.update_statusbar(buffer))
# cursor moved
buffer.connect("mark_set", mark_set_callback)
self.connect("window_state_event", self.update_resize_grip)
self.update_statusbar(buffer)
self.show_all()
def __create_action_group(self):
# GtkActionEntry
entries = (
( "FileMenu", None, "_File" ), # name, stock id, label
( "PreferencesMenu", None, "_Preferences" ), # name, stock id, label
( "ColorMenu", None, "_Color" ), # name, stock id, label
( "ShapeMenu", None, "_Shape" ), # name, stock id, label
( "HelpMenu", None, "_Help" ), # name, stock id, label
( "New", gtk.STOCK_NEW, # name, stock id
"_New", "<control>N", # label, accelerator
"Create a new file", # tooltip
self.activate_action ),
( "Open", gtk.STOCK_OPEN, # name, stock id
"_Open","<control>O", # label, accelerator
"Open a file", # tooltip
self.activate_action ),
( "Save", gtk.STOCK_SAVE, # name, stock id
"_Save","<control>S", # label, accelerator
"Save current file", # tooltip
self.activate_action ),
( "SaveAs", gtk.STOCK_SAVE, # name, stock id
"Save _As...", None, # label, accelerator
"Save to a file", # tooltip
self.activate_action ),
( "Quit", gtk.STOCK_QUIT, # name, stock id
"_Quit", "<control>Q", # label, accelerator
"Quit", # tooltip
self.activate_action ),
( "About", None, # name, stock id
"_About", "<control>A", # label, accelerator
"About", # tooltip
self.activate_about ),
( "Logo", "demo-gtk-logo", # name, stock id
None, None, # label, accelerator
"GTK+", # tooltip
self.activate_action ),
);
# GtkToggleActionEntry
toggle_entries = (
( "Bold", gtk.STOCK_BOLD, # name, stock id
"_Bold", "<control>B", # label, accelerator
"Bold", # tooltip
self.activate_action,
True ), # is_active
)
# GtkRadioActionEntry
color_entries = (
( "Red", None, # name, stock id
"_Red", "<control><shift>R", # label, accelerator
"Blood", COLOR_RED ), # tooltip, value
( "Green", None, # name, stock id
"_Green", "<control><shift>G", # label, accelerator
"Grass", COLOR_GREEN ), # tooltip, value
( "Blue", None, # name, stock id
"_Blue", "<control><shift>B", # label, accelerator
"Sky", COLOR_BLUE ), # tooltip, value
)
# GtkRadioActionEntry
shape_entries = (
( "Square", None, # name, stock id
"_Square", "<control><shift>S", # label, accelerator
"Square", SHAPE_SQUARE ), # tooltip, value
( "Rectangle", None, # name, stock id
"_Rectangle", "<control><shift>R", # label, accelerator
"Rectangle", SHAPE_RECTANGLE ), # tooltip, value
( "Oval", None, # name, stock id
"_Oval", "<control><shift>O", # label, accelerator
"Egg", SHAPE_OVAL ), # tooltip, value
)
# Create the menubar and toolbar
action_group = gtk.ActionGroup("AppWindowActions")
action_group.add_actions(entries)
action_group.add_toggle_actions(toggle_entries)
action_group.add_radio_actions(color_entries, COLOR_RED, self.activate_radio_action)
action_group.add_radio_actions(shape_entries, SHAPE_OVAL, self.activate_radio_action)
return action_group
def activate_about(self, action):
dialog = gtk.AboutDialog()
dialog.set_name("PyGTK Demo")
dialog.set_copyright("\302\251 Copyright 200x the PyGTK Team")
dialog.set_website("http://www.pygtk.org./")
## Close dialog on user response
dialog.connect ("response", lambda d, r: d.destroy())
dialog.show()
def activate_action(self, action):
dialog = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT,
gtk.MESSAGE_INFO, gtk.BUTTONS_CLOSE,
'You activated action: "%s" of type "%s"' % (action.get_name(), type(action)))
# Close dialog on user response
dialog.connect ("response", lambda d, r: d.destroy())
dialog.show()
def activate_radio_action(self, action, current):
active = current.get_active()
value = current.get_current_value()
if active:
dialog = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT,
gtk.MESSAGE_INFO, gtk.BUTTONS_CLOSE,
"You activated radio action: \"%s\" of type \"%s\".\nCurrent value: %d" %
(current.get_name(), type(current), value))
# Close dialog on user response
dialog.connect("response", lambda d, r: d.destroy())
dialog.show()
def update_statusbar(self, buffer):
# clear any previous message, underflow is allowed
self.statusbar.pop(0)
count = buffer.get_char_count()
iter = buffer.get_iter_at_mark(buffer.get_insert())
row = iter.get_line()
col = iter.get_line_offset()
self.statusbar.push(0,
'Cursor at row %d column %d - %d chars in document' % (row, col, count))
def update_resize_grip(self, widget, event):
mask = gtk.gdk.WINDOW_STATE_MAXIMIZED | gtk.gdk.WINDOW_STATE_FULLSCREEN
if (event.changed_mask & mask):
self.statusbar.set_has_resize_grip(not (event.new_window_state & mask))
def main():
ApplicationMainWindowDemo()
gtk.main()
if __name__ == '__main__':
main()