c - 在 GTK+ 3 C 中创建菜单时不显示菜单

标签 c gtk stack-overflow text-editor

Screenshot of the output

我是 gtk+ 的新手。在学习在 gtk+ 中创建菜单时,我只需复制粘贴以下代码,当我运行它时......我不知道问题是什么,但只显示窗口。它不显示任何菜单或菜单栏...如果有人遇到过这个问题请帮助我...

    #include <gtk/gtk.h>
    GdkPixbuf *create_pixbuf(const gchar * filename)
    {
    GdkPixbuf *pixbuf;
    GError *error = NULL;
    pixbuf = gdk_pixbuf_new_from_file(filename, &error);
    if (!pixbuf) {
    fprintf(stderr, "%s\n", error->message);
    g_error_free(error);
    }
    return pixbuf;
    }

    int main(int argc, char *argv[])
    {

    GtkWidget *window;
    GtkWidget *icon;
    GtkWidget *vbox;

    GtkWidget *menubar;
    GtkWidget *fileMenu;
    GtkWidget *fileMi;
    GtkWidget *quitMi;
    GtkWidget *text_view;
    GtkWidget *buffer;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "Write Pad");
    gtk_window_set_default_size(GTK_WINDOW(window), 500, 400);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

    icon = create_pixbuf("Web.png");
    gtk_window_set_icon(GTK_WINDOW(window), icon);

    vbox = gtk_vbox_new(FALSE, 0);
    gtk_container_add(GTK_CONTAINER(window), vbox);


    text_view = gtk_text_view_new ();
    gtk_box_pack_start (GTK_BOX (vbox), text_view, 1, 1, 0);

    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));



    menubar = gtk_menu_bar_new();
    fileMenu = gtk_menu_new();

    fileMi = gtk_menu_item_new_with_label("File");
    quitMi = gtk_menu_item_new_with_label("Quit");

    gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileMi), fileMenu);
    gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), quitMi);
    gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fileMi);
    gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);


    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

    g_signal_connect(G_OBJECT(quitMi), "activate", G_CALLBACK(gtk_main_quit), NULL);



    gtk_widget_show_all(window);

    gtk_main();

    return 0;
    }

最佳答案

代码存在一些问题。您声明的所有变量都使用 GtkWidget * 类型,而函数 create_pixbufgtk_text_view_get_buffer 返回 GdkPixbuf * 的数据code> 和 GtkTextBuffer * 类型。您还使用了已弃用的函数。

此外,您可以在GtkTextView相关函数之后调用菜单相关函数,从而将菜单放置在窗口底部。

这是工作代码:

#include <gtk/gtk.h>

GdkPixbuf *
create_pixbuf (const gchar *filename)
{
    GdkPixbuf *pixbuf;
    GError    *error = NULL;

    pixbuf = gdk_pixbuf_new_from_file (filename, &error);

    if (!pixbuf) {
        fprintf (stderr, "%s\n", error->message);
        g_error_free (error);
    }

    return pixbuf;
}

int
main (int argc, char *argv[])
{
    GtkWidget     *window;
    GdkPixbuf     *icon;
    GtkWidget     *vbox;

    GtkWidget     *menubar;
    GtkWidget     *fileMenu;
    GtkWidget     *fileMi;
    GtkWidget     *quitMi;
    GtkWidget     *text_view;
    GtkTextBuffer *buffer;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    icon = create_pixbuf ("Web.png");

    gtk_window_set_title (GTK_WINDOW (window), "Write Pad");
    gtk_window_set_default_size (GTK_WINDOW (window), 500, 400);
    gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
    gtk_window_set_icon (GTK_WINDOW (window), icon);

    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
    gtk_container_add (GTK_CONTAINER (window), vbox);

    menubar = gtk_menu_bar_new ();
    fileMenu = gtk_menu_new ();

    fileMi = gtk_menu_item_new_with_label ("File");
    quitMi = gtk_menu_item_new_with_label ("Quit");

    gtk_menu_item_set_submenu (GTK_MENU_ITEM (fileMi), fileMenu);
    gtk_menu_shell_append (GTK_MENU_SHELL (fileMenu), quitMi);
    gtk_menu_shell_append (GTK_MENU_SHELL (menubar), fileMi);
    gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0);

    text_view = gtk_text_view_new ();
    gtk_box_pack_start (GTK_BOX (vbox), text_view, TRUE, TRUE, 0);

    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));

    g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
    g_signal_connect (G_OBJECT (quitMi), "activate", G_CALLBACK (gtk_main_quit), NULL);

    gtk_widget_show_all (window);

    gtk_main ();

    return 0;
}

关于c - 在 GTK+ 3 C 中创建菜单时不显示菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37911216/

相关文章:

c - 尝试接受多个字符串输入

c - shmget 不工作

c - GHashTableIter 将 GtkSpinButton 设置为可调整

c - 我的线程图像生成应用程序如何将其数据获取到 gui?

c++ - Stack Overflow 深度优先搜索

C - 需要检测数字中是否存在数字(hw)

C : Pointers and functions 2DArray

python - 重新打开 GTK 窗口后无法访问文本输入框

java - 在 Android 中切换 View 时出现 StackOverflowError(在 Sprint HTC 上测试)

f# - (前向)管道运算符能否阻止尾部调用优化?