Perl Gtk3按钮占满垂直空间,如何设置合适的按钮尺寸?
解决Perl Gtk3中Quit按钮占满垂直空间的问题
你的代码里,Quit按钮占满垂直空间的核心原因是水平盒子(Gtk3::Box)开启了homogeneous属性:$hbox->set_homogeneous(TRUE);。这个属性会强制盒子内所有子部件使用完全相同的尺寸,水平方向均分宽度的同时,垂直方向会拉伸至盒子的最大高度,导致按钮被过度拉伸。
两种解决方法:
方法一:关闭均一尺寸属性
直接将$hbox->set_homogeneous(TRUE);改为$hbox->set_homogeneous(FALSE);,按钮会自动恢复到自身的自然尺寸,不会被强制拉伸。方法二:保留均一布局但限制按钮垂直高度
如果需要保持水平方向的均分布局,可通过获取按钮的自然高度并设置尺寸请求,固定其垂直大小:
# 获取按钮的自然高度 my ($natural_w, $natural_h) = $quitButton->get_preferred_height(); # 设置按钮尺寸:宽度自动,高度使用自然值 $quitButton->set_size_request(-1, $natural_h);
修改后的完整代码(方法一示例):
use strict; use warnings; use utf8; use experimentals; sub main() { use Gtk3 '-init'; use Glib qw/TRUE FALSE/; my $window = Gtk3::Window->new('toplevel'); $window->set_title("Gtk3 Buttons"); $window->set_position("center"); $window->set_default_size(400, 200); $window->set_border_width(10); $window->signal_connect(delete_event => \&quit_function); my $quitButton = Gtk3::Button->new("Quit"); $quitButton->signal_connect(clicked => \&quit_function); my $hbox = Gtk3::Box->new("horizontal", 5); $hbox->pack_start($quitButton, FALSE, FALSE, 0); $hbox->set_homogeneous(FALSE); # 关闭均一尺寸属性 $window->add($hbox); $window->show_all(); sub quit_function { Gtk3->main_quit(); return FALSE; } Gtk3->main(); } main();
修改后,按钮会恢复到正常的大小,不再占据所有垂直空间。
内容的提问来源于stack exchange,提问作者buchi
相关产品推荐
相关产品推荐

