Beginner GTK question

dashawn888 dashawn at gmail.com
Sun Mar 25 06:57:26 EDT 2007


I have a simple page that I want to display a menu and toolbar.  I
have followed the tutorials and have made some customizations to the
basic code snippet found at

http://www.pygtk.org/pygtk2tutorial/examples/uimanager.py

However my customized code does not display the menu bar.  It displays
the toolbar though.  The terminal output is

--------------------------------------------------------------------------------
gui.py:79: GtkWarning: Quit: missing action
  menubar = uimanager.get_widget('/MenuBar')
--------------------------------------------------------------------------------

Line 79 is this

menubar = uimanager.get_widget('/MenuBar')

Thank you for any help in advanced.

Here is the code

--------------------------------------------------------------------------------

#!/usr/bin/env python
#
#
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

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

class d3_gui:
	ui = '''<ui>
		<menubar name="MenuBar">
			<menu action="File">
				<menuitem name="Quit"/>
			</menu>
		</menubar>
		<toolbar name="ToolBar">
			<toolitem action="Quit"/>
		</toolbar>
	</ui>'''

	def __init__(self):
		# Setup the window
		window = gtk.Window()

		# Kill the program if it's closed
		window.connect("destroy", lambda w: gtk.main_quit())

		# Set title and window size
		window.set_title("d3vscan")
		window.set_size_request(640, 480)

		# setup the widget container
		vbox = gtk.VBox()
		window.add(vbox)

		# Setup uimanager for menu and toolbar
		uimanager = gtk.UIManager()

		# Add accelerator group
		accelgroup = uimanager.get_accel_group()
		window.add_accel_group(accelgroup)

		# Create an ActionGroup
		actiongroup = gtk.ActionGroup('d3_gui')
		self.actiongroup = actiongroup

		# Create actions
		actiongroup.add_actions(
			[
				('Quit', gtk.STOCK_QUIT, '_Quit me!', None,
				'Quit the Program', self.quit_d3),
				('File', None, '_File')
			]
		)

		actiongroup.get_action('Quit').set_property('short-label',
'_Quit')

		# Attach the action group
		uimanager.insert_action_group(actiongroup, 0)

		# Add a UI description
		uimanager.add_ui_from_string(self.ui)

		# make menu
		menubar = uimanager.get_widget('/MenuBar')
		vbox.pack_start(menubar, False)

		# Create toolbar
		toolbar = uimanager.get_widget('/ToolBar')
		vbox.pack_start(toolbar, False)

		window.show_all()
		return

	def quit_d3(self, b):
		print 'Quitting program'
		gtk.main_quit()

def main():
	gtk.main()
	return 0

if __name__ == "__main__":
	d3 = d3_gui()
	gtk.main()




More information about the Python-list mailing list