2010-11-16 80 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)