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