c - 如何在 GTK 中将对话框窗口置于主窗口中央?

标签 c gtk

我想打印小的警告消息。为了实现这一目标,我正在创建一个新窗口,并希望它位于主窗口的中心。到目前为止,我已经尝试使用 gtk_widget_set_parentGTK_WINDOW_POPUPGTK_WINDOW_TOPLEVEL 设置其父项,但没有任何效果。

如何使窗口在主窗口居中?

这是该函数的代码:

static void pop_warning(char *title, char *text)
{
    GtkWidget *warning_window;
    GtkWidget *box;
    GtkWidget *label;
    GtkWidget *button;

    warning_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(warning_window), title);
    g_signal_connect(GTK_WINDOW(warning_window), "destroy", G_CALLBACK(gtk_widget_destroy), NULL);
    gtk_container_set_border_width(GTK_CONTAINER(warning_window), 20);
    gtk_window_set_resizable(GTK_WINDOW(warning_window), FALSE);    

    //window is the main window
    gtk_widget_set_parent(warning_window, window);
    gtk_window_set_position(GTK_WINDOW(warning_window), GTK_WIN_POS_CENTER_ON_PARENT);

    box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
    gtk_container_add(GTK_CONTAINER(warning_window), box);

    label = gtk_label_new(text);
    gtk_box_pack_start(GTK_BOX(box), label, TRUE, FALSE, 0);

    button = gtk_button_new_with_label("Ok");
    g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_widget_destroy), warning_window);
    gtk_box_pack_start(GTK_BOX(box), button, TRUE, FALSE, 0);

    gtk_widget_show_all(warning_window);    
}

最佳答案

gtk_window_set_position(GTK_WINDOW(warning_window), GTK_WIN_POS_CENTER_ON_PARENT);

只有在您第一次调用时才有效

gtk_window_set_transient_for(GtkWindow *window, GtkWindow *parent);

正如文档中明确提到的。

您还可以尝试使用没有上述限制的 GTK_WIN_POS_CENTER_ALWAYS - 至少不根据文档。

关于c - 如何在 GTK 中将对话框窗口置于主窗口中央?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21591752/

相关文章:

c - 如何在 Linux 中映射 Windows 共享 (LINUX) 下的文件?

c - `gethostbyname`如何在不要求调用者释放资源的情况下返回 `struct hostent *`?

c - SIGTERM 给所有子进程但不是父进程

c - 接收多条消息的socket编程C

c - 如何用按钮填充 gtk 网格?

c - 如何从 C API 设置/删除 GTK 菜单栏对象的浮雕?

c - 如何确定数字是圆/整数还是浮点/ double

python - 计时器脚本中的 Gtk 标签未更新

c - 如何获得 GtkCellRenderer 的 GtkTreeViewColumn?

python - PyGTK:将一个窗口嵌入到另一个窗口中