段力 2023-10-18 16:57 采纳率: 66.7%
浏览 2
已结题

gtk编程遇到的的一个小问题

代码

#include <gtk/gtk.h>
gint count=1;
void on_button_clicked(GtkWidget *button,GdkEvent* event,gpointer userdata)
{     g_print("Hello,  this is a Hello function test.\n");
g_print("%d\n",(gint)userdata);
count = count + 1 ;
}
int main ( int argc , char* argv[])
{ 
GtkWidget *window;
GtkWidget *button;
gtk_init(&argc,&argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
gtk_window_set_title(GTK_WINDOW(window),"Hello  Function");
gtk_window_set_default_size(GTK_WINDOW(window),500,100);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(window),40);
button = gtk_button_new_with_label("Press this Button will show a message in terminal");
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_button_clicked),(gpointer)count);
gtk_container_add(GTK_CONTAINER(window),button);
}
编译通过,运行无窗口
编译命令 gcc c.c    `pkg-config  --cflags  --libs  gtk+-2.0`或 gcc c.c    `pkg-config  --cflags  --libs  gtk+-3.0`
刚开始编译失败fail to load moudle 
于是sudo apt-get install libcanberra-gtk-module
我的系统ubuntu22.04



  • 写回答

1条回答 默认 最新

  • Leodong. 2023-10-18 17:05
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    根据您提供的代码和信息,问题可能是您在程序的main函数中没有调用gtk_main()函数来启动GTK主循环。gtk_main()函数负责处理GTK事件和绘制窗口,如果没有调用它,窗口将无法显示。

    您可以在main函数的最后添加以下代码来调用gtk_main()函数:

    gtk_widget_show_all(window);
    gtk_main();
    

    这将显示窗口并启动GTK主循环,使窗口能够响应事件和显示内容。

    此外,如果您使用的是GTK 3版本,您需要相应地将编译命令中的gtk+-2.0更改为gtk+-3.0

    修复后的代码如下:

    #include <gtk/gtk.h>
    
    gint count = 1;
    
    void on_button_clicked(GtkWidget *button, gpointer userdata)
    {
        g_print("Hello, this is a Hello function test.\n");
        g_print("%d\n", (gint)userdata);
        count = count + 1;
    }
    
    int main(int argc, char *argv[])
    {
        GtkWidget *window;
        GtkWidget *button;
    
        gtk_init(&argc, &argv);
    
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
        gtk_window_set_title(GTK_WINDOW(window), "Hello Function");
        gtk_window_set_default_size(GTK_WINDOW(window), 500, 100);
        gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
        gtk_container_set_border_width(GTK_CONTAINER(window), 40);
    
        button = gtk_button_new_with_label("Press this Button will show a message in terminal");
        g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(on_button_clicked), (gpointer)count);
    
        gtk_container_add(GTK_CONTAINER(window), button);
    
        gtk_widget_show_all(window);
        gtk_main();
    
        return 0;
    }
    

    请尝试使用修复后的代码并重新编译运行,看看是否能够正确显示窗口并响应按钮点击事件。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月18日
  • 已采纳回答 10月18日
  • 创建了问题 10月18日

悬赏问题

  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!