用GTK制作自动售货机 #包括“UI.h” GtkWidget*创建主框架(gint wid、gint hgt) { GtkWidget*主框架=gtk_窗口新(gtk_窗口顶层); /*窗口属性*/ gtk_窗口设置标题(gtk_窗口(主框架),“欢迎!!”; gtk_窗口设置默认大小(gtk_窗口(主框架)、wid、hgt); /*信号*/ g_信号连接(主_帧,“销毁”,g_回调(gtk_主_退出),空); 返回主框架; } GtkWidget*创建滚动窗口(无效) { GtkWidget*scrolled_window=gtk_scrolled_window_new(NULL,NULL); gtk_滚动_窗口_设置_策略(gtk_滚动_窗口(滚动_窗口)、gtk_策略_自动、gtk_策略_始终); gtk_容器_设置_边框_宽度(gtk_容器(滚动窗口),10); 返回滚动窗口; } GtkWidget*创建_框(GTK方向或gint spc) { GtkWidget*box=gtk_box_new(orn,spc); //gtk_容器设置_边框_宽度(gtk_容器(盒),5); 返回框; } GtkWidget*创建布局(guint wid,guint hgt) { GtkWidget*layout=gtk_layout_new(空,空); gtk_布局设置尺寸(gtk_布局(布局)、wid、hgt); 返回布局; } GtkWidget*创建网格(吉尼特rsp、吉尼特csp) { GtkWidget*grid=gtk_grid_new(); gtk网格设置行间距(gtk网格(网格),rsp); gtk_网格设置_柱间距(gtk_网格(网格),csp); 返回网格; } /* GtkWidget*创建令牌按钮(令牌*tkn) { 字符解析_值[11]; char*string=parse_to_string(tkn->value,parsed_value); GtkWidget*button=gtk_按钮_带_标签的新_(值); //gtk_信号连接(按钮“点击”,G_回调,); 返回按钮; } */ GtkWidget*创建商品按钮(商品*com) { GtkWidget*button=gtk_button_new_,带_标签(com->name); //gtk_信号连接(按钮“点击”,G_回调,); 返回按钮; } #包括“UI.h” int main(int argc,char*argv[]) { int i,j; /*自动售货机*/ 自动售货机*自动售货机; /*框架*/ GtkWidget*主框架; GtkWidget*滚动窗口; GtkWidget*商品框、*商品布局、*商品网格、*商品按钮; /*初始化*/ gtk_init(&argc,&argv); 制作新的自动售货机内存(自动售货机大小); 启动自动售货机(自动售货机,13,13); /*设置主机架*/ 主框架=创建主框架(1000750); /*设置方便的框架和按钮表*/ 商品包装箱=创建包装箱(GTK水平方向,10); 滚动窗口=创建滚动窗口(); 商品布局=创建布局(500700); 商品网格=创建网格(10,10); 对于(i=0;i

用GTK制作自动售货机 #包括“UI.h” GtkWidget*创建主框架(gint wid、gint hgt) { GtkWidget*主框架=gtk_窗口新(gtk_窗口顶层); /*窗口属性*/ gtk_窗口设置标题(gtk_窗口(主框架),“欢迎!!”; gtk_窗口设置默认大小(gtk_窗口(主框架)、wid、hgt); /*信号*/ g_信号连接(主_帧,“销毁”,g_回调(gtk_主_退出),空); 返回主框架; } GtkWidget*创建滚动窗口(无效) { GtkWidget*scrolled_window=gtk_scrolled_window_new(NULL,NULL); gtk_滚动_窗口_设置_策略(gtk_滚动_窗口(滚动_窗口)、gtk_策略_自动、gtk_策略_始终); gtk_容器_设置_边框_宽度(gtk_容器(滚动窗口),10); 返回滚动窗口; } GtkWidget*创建_框(GTK方向或gint spc) { GtkWidget*box=gtk_box_new(orn,spc); //gtk_容器设置_边框_宽度(gtk_容器(盒),5); 返回框; } GtkWidget*创建布局(guint wid,guint hgt) { GtkWidget*layout=gtk_layout_new(空,空); gtk_布局设置尺寸(gtk_布局(布局)、wid、hgt); 返回布局; } GtkWidget*创建网格(吉尼特rsp、吉尼特csp) { GtkWidget*grid=gtk_grid_new(); gtk网格设置行间距(gtk网格(网格),rsp); gtk_网格设置_柱间距(gtk_网格(网格),csp); 返回网格; } /* GtkWidget*创建令牌按钮(令牌*tkn) { 字符解析_值[11]; char*string=parse_to_string(tkn->value,parsed_value); GtkWidget*button=gtk_按钮_带_标签的新_(值); //gtk_信号连接(按钮“点击”,G_回调,); 返回按钮; } */ GtkWidget*创建商品按钮(商品*com) { GtkWidget*button=gtk_button_new_,带_标签(com->name); //gtk_信号连接(按钮“点击”,G_回调,); 返回按钮; } #包括“UI.h” int main(int argc,char*argv[]) { int i,j; /*自动售货机*/ 自动售货机*自动售货机; /*框架*/ GtkWidget*主框架; GtkWidget*滚动窗口; GtkWidget*商品框、*商品布局、*商品网格、*商品按钮; /*初始化*/ gtk_init(&argc,&argv); 制作新的自动售货机内存(自动售货机大小); 启动自动售货机(自动售货机,13,13); /*设置主机架*/ 主框架=创建主框架(1000750); /*设置方便的框架和按钮表*/ 商品包装箱=创建包装箱(GTK水平方向,10); 滚动窗口=创建滚动窗口(); 商品布局=创建布局(500700); 商品网格=创建网格(10,10); 对于(i=0;i,gtk,Gtk,我已经完成了我的小型自动售货机项目所需的基本功能的编写 现在,我正试图用GTK+的函数制作一个UI。从那以后我就很困惑 这是我第一次真正使用GTK 我想要一个网格的商品按钮,应该显示在左侧,但我得到了 在这一部分上几乎被卡住了。我想做的是,因为我“破坏”了商品 为了添加和删除通信,我希望在通信窗口上附加一个滚动条 正如你在源代码中看到的,我做了什么 我制作了一个由comm按钮组成的网格,并添加到一个布局小部件上 我在滚动条小部件上添加了布局 我把滚动条加在一个盒子上,然后打包 我把那个盒子添加到

我已经完成了我的小型自动售货机项目所需的基本功能的编写

现在,我正试图用GTK+的函数制作一个UI。从那以后我就很困惑

这是我第一次真正使用GTK

我想要一个网格的商品按钮,应该显示在左侧,但我得到了

在这一部分上几乎被卡住了。我想做的是,因为我“破坏”了商品

为了添加和删除通信,我希望在通信窗口上附加一个滚动条

正如你在源代码中看到的,我做了什么

  • 我制作了一个由comm按钮组成的网格,并添加到一个布局小部件上
  • 我在滚动条小部件上添加了布局
  • 我把滚动条加在一个盒子上,然后打包
  • 我把那个盒子添加到主窗口
  • 结果是“不令人满意”

    我正在努力通过GNOME官方API


    有人能帮我吗???

    如果你不知道如何创建你的用户界面,试试看。您可以快速尝试并查看这些小部件是如何组合在一起的。

    请将编译程序所需的文件分开并命名为“result is not Successing”(结果不令人满意)不是一个足够好的问题描述,特别是如果您不共享可编译的源文件,则更是如此。也就是说,从源代码来看,使用GtkLayout似乎有点奇怪:您确定需要它吗?最典型的解决方案是滚动窗口+视口。
    #include "UI.h"
    
    GtkWidget* create_main_frame(gint wid, gint hgt) 
    {
        GtkWidget* main_frame = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    
        /* window attributes */
        gtk_window_set_title( GTK_WINDOW(main_frame), "Welcome!!" );
        gtk_window_set_default_size( GTK_WINDOW(main_frame), wid, hgt );
    
        /* signals */
        g_signal_connect(main_frame, "destroy", G_CALLBACK(gtk_main_quit), NULL);
    
        return main_frame;  
    }
    
    GtkWidget* create_scrolled_window(void)
    {
        GtkWidget* scrolled_window = gtk_scrolled_window_new(NULL, NULL);
    
        gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS );
        gtk_container_set_border_width( GTK_CONTAINER(scrolled_window), 10 );
    
        return scrolled_window;
    }
    
    GtkWidget* create_box(GtkOrientation orn, gint spc)
    {
        GtkWidget* box = gtk_box_new(orn, spc);
    
        //gtk_container_set_border_width( GTK_CONTAINER(box), 5 );
    
        return box;
    }
    
    GtkWidget* create_layout(guint wid, guint hgt)
    {
        GtkWidget* layout = gtk_layout_new(NULL, NULL);
    
        gtk_layout_set_size( GTK_LAYOUT(layout), wid, hgt );    
    
        return layout;
    }
    
    GtkWidget* create_grid(guint rsp, guint csp)
    {
        GtkWidget* grid = gtk_grid_new();
    
        gtk_grid_set_row_spacing( GTK_GRID(grid), rsp );
        gtk_grid_set_column_spacing( GTK_GRID(grid), csp );
    
        return grid;
    }
    /*
    GtkWidget* create_token_button(Token* tkn)
    {
        char parsed_value[11];
        char* string = parse_to_string(tkn -> value, parsed_value); 
        GtkWidget* button = gtk_button_new_with_label(value);
    
        //gtk_signal_connect(button, "clicked", G_CALLBACK, );
    
        return button;
    }
    */
    
    GtkWidget* create_commodity_button(Commodity* com)
    {
        GtkWidget* button = gtk_button_new_with_label(com -> name);
    
        //gtk_signal_connect(button, "clicked", G_CALLBACK, );
    
        return button;  
    }
    
    
    #include "UI.h"
    
    int main(int argc, char* argv[])
    {
        int i, j;
        /* vending machine */
        VendingMachine* vending_machine; 
    
        /* frames */
        GtkWidget* main_frame;
        GtkWidget* scrolled_window;
        GtkWidget* commodity_box, * commodity_layout, * commodity_grid, * commodity_button;
    
        /* initialize */
        gtk_init(&argc, &argv);
        make_new_vending_machine_memory(&vending_machine, sizeof(VendingMachine) ); 
        boot_vending_machine(vending_machine, 13, 13);
    
        /* setting main frame */
        main_frame = create_main_frame(1000, 750);
    
        /* setting commodty frames and button table */
        commodity_box = create_box(GTK_ORIENTATION_HORIZONTAL, 10);
        scrolled_window = create_scrolled_window();
        commodity_layout = create_layout(500, 700);
        commodity_grid = create_grid(10, 10);
    
        for (i = 0; i < 13; i++)
            for (j = 0; j < 13; j++) {
                    commodity_button = create_commodity_button(&vending_machine -> commodity[i][j]);
                gtk_grid_attach( GTK_GRID(commodity_grid), commodity_button, i * 300, j * 300, 5, 7 );
            }
    
        /* start adding and packing */
        gtk_layout_put( GTK_LAYOUT(commodity_layout), commodity_grid, 10, 10 );
        gtk_container_add( GTK_CONTAINER(scrolled_window), commodity_layout );
        gtk_box_pack_start( GTK_BOX(commodity_box), scrolled_window, TRUE, TRUE, 10 );
        gtk_container_add( GTK_CONTAINER(main_frame), commodity_box );
    
        /* show all */
        gtk_widget_show_all(main_frame);
    
        gtk_main();
    
        return 0;
    }