Some error for Tk


#1

Hi.
When I was running my program, and click the button, it will show the
following message:
ArgumentError: wrong number of arguments (1 for 0)

But, I have been read some samples…

and here is my code:

require ‘tk’
require ‘sdl’

def Play(path, times)
music=SDL::Mixer::Music.load(path)
SDL::Mixer.playMusic(music,-1)
end
SDL::init(SDL::INIT_AUDIO)
SDL::Mixer.open
path=TkVariable.new
TkEntry.new(“textvariable”=>path).pack(“padx”=>10)
TkButton.new(){
text “Play”
command {proc Play(path.value, -1)}
}.pack(“padx”=>10)
Tk.mainloop

Does it have any error in the code?
Could anyone help me?
Thank you a lot.


#2

DÅ?a Nedeľa 19 Február 2006 17:08 CFC napísal:

Hi.
When I was running my program, and click the button, it will show the
following message:
ArgumentError: wrong number of arguments (1 for 0)

You botched something or the API changed a bit since the samples were
made.
What line / in which method call? It’s hard to put the finger on this
without
that for people that don’t know Tk and SDL by heart without that.

David V.


#3

Follow up after skimming the code a few times, by lucky coincidence, I
actually remember THAT much Tk…

DÅ?a Nedeľa 19 Február 2006 17:08 CFC napísal:

TkEntry.new(“textvariable”=>path).pack(“padx”=>10)
TkButton.new(){
text “Play”
command {proc Play(path.value, -1)}

IIRC, the #command method takes a Proc object as an argument, not a
block. The
above line should most probably be:
command(proc { Play(path.value, -1) })

You or someone else misplaced a curly brace, I added the parentheses for
clarity.

}.pack(“padx”=>10)
Tk.mainloop

(Why the heck is the #Play method in CamelCase anyway? Tsk-tsk-tsk, the
sample
author should get a lecture about naming conventions.)

David V.r


#4

From: David V. removed_email_address@domain.invalid
Subject: Re: Some error for Tk.
Date: Mon, 20 Feb 2006 01:21:20 +0900
Message-ID: removed_email_address@domain.invalid

IIRC, the #command method takes a Proc object as an argument, not a block. The
above line should most probably be:
command(proc { Play(path.value, -1) })

A block is available for #command method on current Ruby/Tk.
So,

  command { Play(path.value, -1) }

is acceptable.


#5

Thanks a lot. :smiley:
I’ve been solve this problem.
Thanks again!!