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

Ron Croonenberg ronc at depauw.edu
Wed Dec 30 10:43:49 EST 2009



Dave Angel wrote:
> 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
> 


Hello Dave,

I don't think you're nuts *lol*.  Actually I have been thinking along a 
similar line. (although I am new to python and probably thinking along C 
lines too much)

I saw some postings/articles that I found with google mentioning a 
python bug with that behavior. (However I think that the chances of me 
running into a bug vs me making a mistake is probably 1:9999)

What I think is weird though is that it doesn't matter how many 
parameters I put there. The error msg is still the same. (it doesn't 
matter if I actually put 1, 2, 3, 4 or even 5 there.  the message is 
exactly the same.    'expecting 1 given 3'

I changed the debug level to see if I could get more messages.
(It is a rhythmbox plugin,  for debugging I have to start is with 
something like 'GST_DEBUG=3 rhythmbox &>log-file')
If I change the debug level to 5 or so I still only get that one error 
msg and nothing else. (yes surprised me too)

Ron




More information about the Python-list mailing list