I''m trying to get my first small test wxRuby app up and running. I have
created an XRC file using DialogBlocks and then used xrcise to produce
the ruby code which loads it. I then did a bit of cutting and pasting to
produce my own ruby code to add functionality. However I keep running
into the same problem of ''undefined method''. I''ve
tried lots of
different alternatives to get_selection (ie, value, get_value,
get_item_data etc but with no luck).
I''m sure I''m doing something wrong that someone will find to
be a basic
error (hopefully!). Happy to post XRC file if necessary. Any help
gratefully appreciated.
___ The error message:__________________________________________________
$ ruby xrctest.rb
xrctest.rb:10:in `generatetext'': undefined method
`get_selection'' for
nil:NilClass (NoMethodError)
from xrctest.rb:18:in `initialize''
from
/usr/lib/ruby/gems/1.8/gems/wxruby-1.9.10-x86_64-linux/lib/wx/classes/app.rb:16:in
`call''
from
/usr/lib/ruby/gems/1.8/gems/wxruby-1.9.10-x86_64-linux/lib/wx/classes/app.rb:16:in
`process_event''
from
/usr/lib/ruby/gems/1.8/gems/wxruby-1.9.10-x86_64-linux/lib/wx/classes/app.rb:16:in
`on_run''
from
/usr/lib/ruby/gems/1.8/gems/wxruby-1.9.10-x86_64-linux/lib/wx/classes/app.rb:16:in
`main_loop''
from
/usr/lib/ruby/gems/1.8/gems/wxruby-1.9.10-x86_64-linux/lib/wx/classes/app.rb:16:in
`run''
from xrctest.rb:23
___Xrcise produced this (myframe.rb):__________________________________
class FrameBaseClass < Wx::Frame
attr_reader :id_choice_select, :id_datectrl, :id_button_test,
:id_textctrl_test, :id_button_close
def initialize(parent = nil)
super()
xml = Wx::XmlResource.get
xml.flags = 2 # Wx::XRC_NO_SUBCLASSING
xml.init_all_handlers
xml.load("testwindow.xrc")
xml.load_frame_subclass(self, parent, "ID_WXFRAME")
finder = lambda do | x |
int_id = Wx::xrcid(x)
begin
Wx::Window.find_window_by_id(int_id, self) || int_id
# Temporary hack to work around regression in 1.9.2; remove
# begin/rescue clause in later versions
rescue RuntimeError
int_id
end
end
@id_choice_select = finder.call("id_choice_select")
@id_datectrl = finder.call("id_datectrl")
@id_button_test = finder.call("id_button_test")
@id_textctrl_test = finder.call("id_textctrl_test")
@id_textctrl_test.extend(ClassTextCtrl)
@id_button_close = finder.call("id_button_close")
if self.class.method_defined? "on_init"
self.on_init()
end
end
end
___And my own code (xrctest.rb):__________________________________
require ''rubygems''
require ''wx''
# load in the generated code
require ''myframe''
# Mix-in
module ClassTextCtrl
def generatetext
self.value = @id_choice_select.get_selection
end
end
# Inherit from the generated base class and set up event handlers
class FrameBase < FrameBaseClass
def initialize
super()
evt_button(id_button_test) { id_textctrl_test.generatetext }
end
end
# Run the class
Wx::App.run do
FrameBase.new.show
end
--
Posted via http://www.ruby-forum.com/.
Hi Rooby Nooby,
@id_choice_select =
finder.call("id_choice_select")>
It look like your xrc file lack or mispelled the name
"id_choice_select".
bio.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://rubyforge.org/pipermail/wxruby-users/attachments/20090214/bffcb08b/attachment.html>
>> @id_choice_select = finder.call("id_choice_select")> It look like your xrc file lack or mispelled the name > "id_choice_select".Fabio - thanks for your suggestion but I''m not sure that''s the case or indeed the problem here. Still no luck with this - any other ideas gratefully appreciated. -- Posted via http://www.ruby-forum.com/.
Rooby Nooby wrote:> Fabio - thanks for your suggestion but I''m not sure that''s the case or > indeed the problem here. Still no luck with this - any other ideas > gratefully appreciated. >It''s because @id_choice_select is an instance variable of the FrameBaseClass instance. When you are in the method generatetext, "self" is the TextCtrl, not the Frame. If you were to rewrite the event handler as: evt_button(...) { id_textctrl_text.value = id_choice_select.selection } it should work a
The problem is, two things that I can see. First, I don''t see where your actually mixing in the module ClassTextCtrl into the instance of id_textctrl_test. You need to do something like this in your initialization function: class << @id_textctrl_test extend ClassTextCtrl end Second, your trying to access an instance variable that is defined in the FrameBase class, from the TextCtrl class. Which is where your nil is coming from. My suggestion would be to do this in your module function: def generatetext self.value = self.parent.id_choice_select.get_selection end This should solve your problem, and make it work properly. On Sun, Feb 15, 2009 at 12:53 PM, Rooby Nooby <lists at ruby-forum.com> wrote:> >> @id_choice_select = finder.call("id_choice_select") > > > It look like your xrc file lack or mispelled the name > > "id_choice_select". > > Fabio - thanks for your suggestion but I''m not sure that''s the case or > indeed the problem here. Still no luck with this - any other ideas > gratefully appreciated. > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > wxruby-users mailing list > wxruby-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/wxruby-users >-- Mario Steele http://www.trilake.net http://www.ruby-im.net http://rubyforge.org/projects/wxruby/ http://rubyforge.org/projects/wxride/ -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/wxruby-users/attachments/20090215/351fca32/attachment-0001.html>
Mario Steele wrote:> The problem is, two things that I can see. First, I don''t see where > your actually mixing in the module ClassTextCtrl into the instance of > id_textctrl_test.Mario - the code that xrcise generates does this for you. If you define a "subclass" for a widget in the XRC editor, xrcise will generate code that does @widget.extend SubClass which is all you need; this is too much, I think:> class << @id_textctrl_test > extend ClassTextCtrl > endcheers alex
Some great suggestions here guys, many thanks again for taking the time to come to the rescue. I''ve had a number of successes based on your suggestions and I''m now starting to pick up some speed in developing in wxRuby (and finally starting to have some fun in the process). -- Posted via http://www.ruby-forum.com/.