【问题标题】:Resizing GTK Widgets into vbox in C在 C 中将 GTK 小部件调整为 vbox 的大小
【发布时间】:2011-01-26 16:06:11
【问题描述】:

嗯,我在 GTK 中做的一个小界面有问题。

我在一个盒子里放了一些小部件,正好三个小部件,我把它们放在一个带有gtk_box_pack_start 的 vbox 中。 我使用 gtk_widget_set_size_request 函数调整了这些小部件的大小,但似乎没有生效,因为小部件已扩展到 vbox 的总宽度,并且不尊重我在函数中固定的大小。

实现这一点的代码是:

enter = gtk_button_new();
gtk_button_set_image(GTK_BUTTON(enter), gtk_image_new_from_file("iconos/submit.png"));
gtk_widget_set_size_request(enter, 195, 32);

//User,pass
login->user = gtk_entry_new();
login->passwd = gtk_entry_new();
gtk_widget_set_size_request(login->user, 195, 32);
gtk_widget_set_size_request(login->passwd, 195, 32);

gtk_box_pack_start(GTK_BOX(v_box), login->user, FALSE, FALSE, 10);
gtk_box_pack_start(GTK_BOX(v_box), login->passwd, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(v_box), enter, FALSE, FALSE, 10);

gtk_container_add(GTK_CONTAINER(window), v_box);

如果我把这些小部件对齐,我没有问题,大小是固定的。

这是为什么?

【问题讨论】:

    标签: c gtk


    【解决方案1】:

    你想通过设置大小来达到什么目的?正如gtk_widget_set_size_request() 的文档所说,

    请注意设置任何固定大小的固有危险 - 主题、其他语言的翻译、不同的字体和用户操作都可以更改给定小部件的适当大小。因此,基本上不可能硬编码一个始终正确的大小。

    您可以设置小部件的大小request,但这与设置size 不同;我们不能总是得到我们想要的东西,所以在某些情况下,小部件没有得到它请求的大小。这是其中一种情况。

    GTK 的设计目的是让您不必为小部件设置固定大小。 (请参阅文档中的上述引用。)通常有更好的方法来实现您想要的。

    在这种情况下,将您的按钮放在GtkHButtonBoxgtk_container_add 中,并将按钮框打包到您的垂直框中,将expandfill 参数设置为FALSE,就像您所做的那样之前。

    【讨论】:

    • 嗨,对不起我的迟钝回答。基本上,如果一个小部件进入 gtk_alignment,我可以将这个小部件调整为我想要的大小,但如果它超出 gtk_alignment,例如进入一个垂直框,gtk_widget_set_size_request 不会产生任何效果。不知道我解释的对不对,抱歉。
    • @Leber,我并不是说你真的想对小部件的容器和大小请求做什么 - 我从你原来的问题中得到了这个。我在问您设计的哪一部分需要您设置硬编码大小。 GTK 的设计方式通常不需要硬编码小部件的大小,这就是 VBox 可以覆盖大小请求的原因。因此,如果您说出您要创建的效果,StackOverflow 的人员可以帮助您做到这一点。我们当然不认为你是个智障。
    • 你好吗。我将尝试更好地解释这一点。我在 VBox 中有一个按钮,我希望这个按钮具有特定的大小,例如 150x50。我尝试使用 gtk_widget_set_size_request 但这不起作用。也许我不明白这个功能的功能。对不起我的英语不好。如果您需要更多详细信息,请询问我。谢谢
    • @Leber,我的问题是为什么您希望按钮的特定大小为 150x50。请参阅我对答案的编辑。
    • 嗨,纯粹是审美原因。我不希望按钮填充 vbox 的所有宽度。这是一个错误的决定吗?
    猜你喜欢
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2011-09-15
    相关资源
    最近更新 更多