2010-11-16 78 views
0

我創建了兩個gtkmm按鈕並添加到HBox對象中。我打電話給pack_end,並保持大小爲21,20。但是,尺寸不會保持。這是我寫的代碼和我在運行程序時獲得的窗口。gtkmm按鈕沒有保持大小和位置

alt text

注:mywindow的是的GTK子::窗口

空隙mywindow的:: customizeTitleBar() { //創建垂直框 的Gtk ::垂直框* VBOX =新的Gtk: :垂直框(FALSE,0);

//create a horizontal box 
Gtk::HBox *hBox = new Gtk::HBox(TRUE,0); 
hBox->set_border_width(5); 

//create title bar image 
Gtk::Image *titleBarImage = new Gtk::Image("src/WindowTitleBar.png"); 
titleBarImage->set_alignment(Gtk::ALIGN_LEFT); 

// hBox-> pack_start(* titleBarImage,GTK :: PACK_EXPAND_WIDGET,0);

//create cloze button for window 
mButtonClose = new Gtk::Button; 
(*mButtonClose).set_size_request(21,20); 
Gtk::Image *mImage = new Gtk::Image("src/Maximize.jpeg"); 
(*mButtonClose).add(*mImage); 
(*mButtonClose).set_image_position(Gtk::POS_TOP); 

// connecting close window function when cliked on close button 
//(*mButtonClose).signal_clicked().connect(sigc::mem_fun(this, &MYWindow::closeWindow)); 

hBox->pack_end(*mButtonClose,Gtk::PACK_EXPAND_WIDGET,0); 
Gtk::Button * mBtton = new Gtk::Button; 
mBtton->set_size_request(21,20); 
Gtk::Image *img = new Gtk::Image("src/Maximize.jpeg"); 
mBtton->add(*img); 
mBtton->set_image_position(Gtk::POS_TOP); 

hBox->pack_end(*mBtton,Gtk::PACK_EXPAND_WIDGET,0); 

vBox->add(*hBox); 

//drawing area box 
Gtk::HBox *hBoxDrawingArea = new Gtk::HBox; 

Gtk::DrawingArea *mDrawingArea = new Gtk::DrawingArea; 

hBoxDrawingArea->pack_start(*mDrawingArea,Gtk::PACK_EXPAND_WIDGET,0); 

vBox->add(*hBoxDrawingArea); 

//status bar hBox 
Gtk::HBox *hBoxStatusBar = new Gtk::HBox; 

vBox->add(*hBoxStatusBar); 

this->add(*vBox); 

this->show_all(); 

}

回答

0

我還不是GTK專家(但我學習),這裏有一兩件事你可以嘗試,這是我一直在做的事情。 使用空地製作一個小型的獨立項目。 Glade可以很容易地將所有包裝設置擰緊,以便您立即看到更改的效果。 我想在調整窗口大小的情況下,您必須保存glade文件並運行程序(使用gtkbuilder渲染glade文件)並手動調整窗口大小以查看效果,但是一旦創建了獨立項目,你可以用它來進行其他的gtk測試。 如果你和我一樣,你會因爲空地的奇妙而搖擺不定,並以這種方式構建你的整個系統。

但基本上,這聽起來像一個包裝的問題,因爲我已經有了,但並不是所有的地方調整按鈕。 至於不移動,我不確定你可以這樣做,但我不是專家。我認爲你應該能夠固定一些如果不是所有的hbox部件的大小,以便它們中的按鈕不會移動,但我不確定如果沒有任何hbox部件不能發生什麼情況當你長大窗戶時,可以調整大小以適應鬆弛。

再次,聽起來象是樂趣格萊德嘗試。 :-)

0

我想你打包爲FALSE,也許這就是問題所在:

Gtk::HBox *hBox = new Gtk::HBox(TRUE,0) 

我使用Python GTK像這樣的東西:

box1.pack_start(box2,False)