TypeError: startView() takes exactly 1 argument (3 given)

Dave Angel davea at ieee.org
Wed Dec 30 01:09:23 EST 2009


Ron Croonenberg wrote:
> <div class="moz-text-flowed" style="font-family: -moz-fixed">Hello,
>
> I am trying to write a plugin for Rhythmbox in python and run into a 
> 'strange' problem. For a method (an action for clicking a button) I 
> started a method and however many arguments I use, it keeps giving me 
> the same error:
>
> 'TypeError: startView() takes exactly 1 argument (3 given)'
>
> does someone have any pointers or tips?, thanks;
>
> Ron
>
> here is the code I have the problem with:
>
> import rb
> import pygtk
> import gtk, gobject
>
>
> pygtk.require('2.0')
>
>
>
> class tb_button (rb.Plugin):
>
> #
> # the init thing
> #
>    def __init__(self):
>       rb.Plugin.__init__(self)
>
> #
> # the activate thing
> #
>    def activate(self, shell):
>       self.shell = shell
>
>       view_button = """
>                   <ui>
>                     <toolbar name="ToolBar">
>                       <placeholder name="View">
>                         <toolitem name="View" action="viewAction">
>                         </toolitem>
>                       </placeholder>
>                     </toolbar>
>                   </ui>
>                   """
>
>       # create a new action
>       action = gtk.Action('viewAction',
>                         _(' _View'),
>                         _('Browse Track '), "")
>
>       # connect it
>       action.connect('activate', self.startView, shell)
>       action_group = gtk.ActionGroup('NewActionGroup')
>       action_group.add_action(action)
>       shell.get_ui_manager().insert_action_group(action_group)
>
>       # add it to the toolbar
>       ui_manager = shell.get_ui_manager()
>       ui_manager.add_ui_from_string(view_button)
>
>
>
> #
> # Start the  View
> #
>    def startView(self, widget, shell, se):
> # nothing yet
>       return
>
>
Please give the complete error traceback, and make sure it matches the 
code you post.  I'm guessing that the subset of the error message you're 
quoting occurs when you define startView() as taking only self as a 
parameter.

A quick caveat.  I'm not familiar with GTK in particular, but I 
recognize the paradigm.  You're defining an event handler (startView).  
And you define a certain set of parameters (not arguments), presently 
called self, widge, shell, and se.

But you're not calling it, you're connecting it to an action.  So when 
that action triggers (or event happens), the GUI system will call your 
event handler.  You don't control the arguments it passes, and 
apparently it passes 3.  So you need to change the formal parameters in 
your def to match.

More specifically what are those parameters ?  I don't know, but you 
should be able to tell from sample pyGTK sources, or somebody else can 
chime in.  And maybe I'm totally nuts here.

DaveA




More information about the Python-list mailing list