You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:17:15