【问题标题】:GTK3 C Menu button with Popover menu sample code (ONLY using .c, not .ui)带有弹出菜单示例代码的 GTK3 C 菜单按钮(仅使用 .c,而不是 .ui)
【发布时间】:2018-11-06 03:46:56
【问题描述】:

如何使用 gtk_popover_menu_new() 来实现简单的 gtk_menu_button_new()? 当我尝试使用 Glade 时,它​​可以完美运行,但是,我需要 .c 代码,而不是 .ui 代码。 我在 Internet 上找不到仅将 .c 用于 Popovermenu 的单个示例代码

谁能提供非常简单的示例代码,其中弹出菜单包含几个按钮?最好是在 int main 中编写窗口设计代码,而不是 static void activate。

There will be .gif that will show what I want to make

附:我知道,为了在里面放置多个按钮,我需要使用 GTK_BOX。

编辑:我添加了包含菜单按钮的示例代码,但它不起作用。请完成此代码,使其像在 .gif 中一样工作。 编译:gcc pkg-config --cflags gtk+-3.0 -o './testprogram.run' './testprogramcode.c' pkg-config --libs gtk+-3.0

编辑 2:我在 testBox 中添加了一个按钮

代码:

#include <gtk/gtk.h>

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

    GtkWidget *window;


    gtk_init(&argc, &argv);
    //Create window
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
    gtk_window_set_title(GTK_WINDOW(window), "Simple menu");


    //Creating fixed container
    GtkWidget *fixedContainer = gtk_fixed_new ();
    gtk_container_add(GTK_CONTAINER(window), fixedContainer);

    //Creating and adding new menu button in fixed container
    GtkWidget *testMenuButton = gtk_menu_button_new ();
    gtk_fixed_put (GTK_FIXED(fixedContainer), testMenuButton, 50, 50);

    //Adding popover to menu button
    GtkWidget *testPopOver = gtk_popover_new (testMenuButton);

    //Creating GTK_BOX to hold popover box contents
    GtkWidget *testBox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);

    //Creating and adding new button in testBox
    GtkWidget *testButton = gtk_button_new ();
    gtk_box_pack_start(GTK_BOX(testBox), testButton, TRUE, TRUE, 5);

    //How to add testBox to testPopOver?









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

    return 0;
}

【问题讨论】:

  • 您为什么不喜欢.ui 文件?如果您不想依赖外部文件,可以将其直接包含到您的 C 程序中。
  • 我避免使用 .ui 文件,因为它比直接放置没有中间人的 gui 对象更浪费计算机资源(我假设 .ui 是中间人)。我正在做所有事情,即使我使程序开发时间更长,我也可以做些什么来尽可能快地编程工作。如果我可以在快和快一点之间做出选择,我会选择快一点。

标签: c button gtk3 popover


【解决方案1】:

你可以试试这个sn-p:

  GtkWidget *mb = gtk_menu_button_new ();
  GtkWidget *po = gtk_popover_new (mb);
  GtkWidget *lb = gtk_label_new ("hello");

  gtk_container_add (po, lb);
  g_object_set (mb, "margin", 150, NULL);
  gtk_menu_button_set_popover (mb, po);

但是,避免使用 .ui 是明智之举。您最好避免过早的优化。

【讨论】:

  • 我试图实现这个,但没有成功。你能把上面的代码拿走并尝试完成吗?为了解决这个问题,我制作了非常短的代码以尽可能清晰。我是 GTK3 和 C 的新手,也许我在实现它时犯了错误。
  • @Bumbieris112 你的 testBox 是空的,至少添加一个小部件。
  • 我照你说的做了。但我仍然卡住了。不知道怎么添加testBox到testPopOver。
  • @Bumbieris112 gtk_container_add(我的代码中的第 5 行)。 GtkPopover 是 GtkBin 的子类。
  • @Bumbieris112 尝试在弹出框上调用gtk_widget_show_all
猜你喜欢
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多