无法以编程方式减小gtk窗口的大小 [英] Cannot reduce size of gtk window programatically

查看:64
本文介绍了无法以编程方式减小gtk窗口的大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以编程方式调整gtk窗口大小时,我似乎面临一个问题.问题是,一旦将窗口的宽度和高度增加到800x600,我似乎无法将其减小到其原始大小400x200.下面是示例代码.有人遇到过这样的问题吗?

I seem to be facing a problem when resizing a gtk window programatically. The problem is that once I have increased the width and height of the window to 800x600, I cannot seem to reduce it back to its original size of 400x200. Below is the sample code. Has anyone faced such a problem?

#include <gtk/gtk.h>

static gboolean is_clicked = FALSE;

static void Child_window_resize( GtkWidget *widget,
               GtkWidget *window)
{
    if(!is_clicked)
    {
        g_print("Inside If block increase bool value %d\n",is_clicked);
        gtk_widget_set_size_request(window,800,600);
        is_clicked = TRUE;
    }
    else
    {
        g_print("Inside Else block decrease bool value %d\n",is_clicked);
        gtk_widget_set_size_request(window,400,200);
        is_clicked = FALSE;
    }
}

int main(int argc, char* argv[])
{
    GtkWidget *window;
    GtkWidget *fixed;
    GtkWidget *resizebutton;

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_set_size_request(window,400,200);
    gtk_window_set_resizable(GTK_WINDOW(window),TRUE);
    gtk_window_set_title(GTK_WINDOW(window), "Demo Resize");
    gtk_window_set_decorated(GTK_WINDOW(window),FALSE);
    gtk_signal_connect(GTK_OBJECT(window), "destroy",
                        GTK_SIGNAL_FUNC(gtk_exit), NULL);

    gtk_container_set_border_width(GTK_CONTAINER(window), 10);
    // creating a fixed GTK_CONTAINER
    fixed = gtk_fixed_new();
    gtk_container_add(GTK_CONTAINER(window),fixed);
    gtk_widget_show(fixed);

    resizebutton = gtk_button_new_with_label("Resize");
    gtk_widget_set_size_request(resizebutton, 80, 60);
    gtk_fixed_put(GTK_FIXED(fixed), resizebutton, 0, 0);

    gtk_signal_connect(GTK_OBJECT(resizebutton), "clicked",
                GTK_SIGNAL_FUNC(Child_window_resize), window);

    gtk_widget_show(resizebutton);
    gtk_widget_show(window);
    gtk_main();
    return 0;
}

使用...

gcc -Wall -Werror -g resize.c -o resize -export-dynamic `pkg-config --cflags --libs gtk+-2.0 gthread-2.0`

我们非常感谢您的帮助.

Any help is much appreciated.

推荐答案

您需要

Instead of gtk_widget_set_size_request(), you need gtk_window_resize().

从链接的手册中:

void
gtk_window_resize (GtkWindow *window,
                   gint width,
                   gint height);

按照用户的意愿调整窗口大小,服从几何约束.默认的几何约束是窗口可能不会小于其尺寸要求;要覆盖此约束,请调用 gtk_widget_set_size_request()将窗口的请求设置为较小的值.

Resizes the window as if the user had done so, obeying geometry constraints. The default geometry constraint is that windows may not be smaller than their size request; to override this constraint, call gtk_widget_set_size_request() to set the window's request to a smaller value.

如果在显示第一个窗口之前调用了 gtk_window_resize()时间,它会覆盖使用设置的任何默认大小 gtk_window_set_default_size().

If gtk_window_resize() is called before showing a window for the first time, it overrides any default size set with gtk_window_set_default_size().

Windows的尺寸调整不得小于1 x 1像素.

Windows may not be resized smaller than 1 by 1 pixels.

这篇关于无法以编程方式减小gtk窗口的大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆