因為手頭上沒有Unix like環境
所以必須在windows上架構Gtk2Perl的環境
首先要先安裝ActivePerl這樣才能在windows上編譯及執行Perl
下載位置:ActivePerl
注意,這裡建議安裝ActivePerl 5.8.9.827版本比較穩定,
更新的版本在install ppm上會有些不可預期的問題。
再來利用ppm指令載入Gtk相關的模組
ppm install http://gtk2-perl.sourceforge.net/win32/ppm/ExtUtils-Depends.ppd
ppm install http://gtk2-perl.sourceforge.net/win32/ppm/ExtUtils-PkgConfig.ppd
ppm install http://gtk2-perl.sourceforge.net/win32/ppm/Glib-1080.ppd
ppm install http://gtk2-perl.sourceforge.net/win32/ppm/Gtk2-1080.ppd
ppm install http://gtk2-perl.sourceforge.net/win32/ppm/Gtk2-GladeXML-1.005.ppd
接著要安裝GTK+ Development Enviroment
下載位置:Glade/Gtk+ for Windows
這個安裝檔包含glade3,一個Gtk所見即所得的工具
整個Gtk2Perl的開發環境在此已建構完成
接下來實際拉個畫面來試試看
打開glade3拖拉個畫面如下,並另存新檔檔名為GUI.glade:
use Glib qw/TRUE FALSE/; use Gtk2 '-init'; use Gtk2::GladeXML; my $gladexml = Gtk2::GladeXML->new("GUI.glade"); $gladexml->signal_autoconnect_from_package('main'); my $window = $gladexml->get_widget('window1'); $window->signal_connect( 'delete_event' => sub{Gtk2->main_quit();}); $window->show_all(); Gtk2->main();
由上面的程式碼可知我們就是用Gtk2::GladeXML這個模組來載入glade編寫出來的.glade檔,
接著直接點擊Gtk2Perl.pl就可以看到執行畫面:
Can't locate object method "signal_connect" via package "Gtk2::Window"
請找出Gtk2.pm檔案,在開頭加上push @Gtk2::Object::ISA, 'Glib::Object';這行即可
最後簡單介紹兩個元件的使用心得
Gtk2::ComboBox,下面的程式碼(非完整)
利用Gtk2::ListStore來做為combobox model的資料來源,
使用Gtk2::CellRendererText來呈現Combobox的欄位,
$FFComboBox->add_attribute ($fy_renderer, "text", ID_COLUMN);
表示render由model的ID_COLUMN欄位取得"text"文字資料
Gtk2::ComboBox,下面的程式碼(非完整)
利用Gtk2::ListStore來做為combobox model的資料來源,
使用Gtk2::CellRendererText來呈現Combobox的欄位,
$FFComboBox->add_attribute ($fy_renderer, "text", ID_COLUMN);
表示render由model的ID_COLUMN欄位取得"text"文字資料
$fy_model = Gtk2::ListStore->new('Glib::String'); foreach (reverse(keys(%fy_all))) { $fy_model->set($fy_model->append, ID_COLUMN, $_); } $FFComboBox->clear(); $FFComboBox->set_model($fy_model); $fy_renderer = Gtk2::CellRendererText->new; $FFComboBox->pack_start ($fy_renderer, false); $FFComboBox->add_attribute ($fy_renderer, "text", ID_COLUMN); if ($FFComboBox->get_active() == -1) { $FFComboBox->set_active(0); }
Gtk2::Dialog,下面是說明一般是如何接受Dialog(與繼承Dialog的模組)的回傳動作,
$config_dialog->set_response_sensitive (0, FALSE);
是說將0註冊為這個dialog的response_id,
然後$config_dialog->run()時會等待該dialog有所動作,並回傳該動作的response_id,
至於dialog的動作就是由button元件觸發,所以button元件會有一個response_id屬性,
用來註明該button動作時會回傳的response_id值,
最後就是利用if (0 eq $config_dialog->run())來判斷按下的是dialog中的那一個按鈕
my $config_dialog = shift @_; my $text_view = shift @_; $config_dialog->set_response_sensitive (0, FALSE); $config_dialog->show(); if (0 eq $config_dialog->run()){ $config_dialog->hide(); }
參考文件: