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

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日

悬赏问题

  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来