7 марта 2012 г.

wxRuby & xrc файл

Чтобы загрузить форму с XRC файла (файл ресурсов WxWidgets), необязательно использовать wxSugar, есть более простой способ.

Допустим имеем xrc файл с описанием wxPanel, на которой расположены wxButton - "m_button1", и  wxStaticText - "m_staticText1".
xrc файл:

  1. <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>  
  2. <resource xmlns="http://www.wxwindows.org/wxxrc" version="2.3.0.1">  
  3.     <object class="wxPanel" name="MyPanel1">  
  4.         <style>wxTAB_TRAVERSAL</style>  
  5.         <size>500,300</size>  
  6.         <object class="wxBoxSizer">  
  7.             <orient>wxVERTICAL</orient>  
  8.             <object class="sizeritem">  
  9.                 <option>0</option>  
  10.                 <flag>wxALL</flag>  
  11.                 <border>5</border>  
  12.                 <object class="wxButton" name="m_button1">  
  13.                     <label>MyButton</label>  
  14.                     <default>0</default>  
  15.                 </object>  
  16.             </object>  
  17.             <object class="sizeritem">  
  18.                 <option>0</option>  
  19.                 <flag>wxALL</flag>  
  20.                 <border>5</border>  
  21.                 <object class="wxStaticText" name="m_staticText1">  
  22.                     <label>MyLabel</label>  
  23.                     <wrap>-1</wrap>  
  24.                 </object>  
  25.             </object>  
  26.         </object>  
  27.     </object>  
  28. </resource>  

rb файл:


  1. # coding: utf-8  
  2. require 'wx'  
  3. class XrcApp < Wx::App  
  4.   
  5.   def on_init  
  6.     #Читаем xrc файл   
  7.     xml = Wx::XmlResource.get()  
  8.     xml.init_all_handlers()  
  9.     xml.load("form.xrc")  
  10.   
  11.         #Создаем новый фрейм в который поместим нашу панель  
  12.         frame = Wx::Frame.newnil, -1, 'Simple' )  
  13.         frame.set_client_size( Wx::Size.new( 200, 200))  
  14.         # Помещаем панель на фрейм  
  15.         xml.load_panel( frame, 'MyPanel1')  
  16.   
  17.         #переменной @but присвоим ссылку на элемент 'm_button1'  
  18.         @but = frame.find_window_by_name('m_button1')  
  19.         #обработчик события  
  20.         evt_button(@but.get_id()) { |event| my_button_click(event)}  
  21.   
  22.         #переменной @label присвоим ссылку на элемент 'm_staticText1'  
  23.         @label =frame.find_window_by_name('m_staticText1')  
  24.         frame.show()  
  25.   end  
  26.   def my_button_click(event)  
  27.     puts @label::get_label()  
  28.     @label::set_label('hello')  
  29.   end  
  30.   
  31. end  
  32.   
  33. XrcApp.new().main_loop()