三、Gtk4-Widgets(1)

1 GtkLavel,GtkButton and GtkBox

1.1 GtkLabel

在前一节中,我们创建了一个窗口并将其显示在屏幕上。现在我们进入下一个主题,在这个窗口中添加部件。最简单的部件是GtkLabel。它是一个包含文本的部件。

 1 #include <gtk/gtk.h>
 2 
 3 static void
 4 app_activate (GApplication *app) {
   
   
 5   GtkWidget *win;
 6   GtkWidget *lab;
 7 
 8   win = gtk_application_window_new (GTK_APPLICATION (app));
 9   gtk_window_set_title (GTK_WINDOW (win), "lb1");
10   gtk_window_set_default_size (GTK_WINDOW (win), 400, 300);
11 
12   lab = gtk_label_new ("Hello.");
13   gtk_window_set_child (GTK_WINDOW (win), lab);
14 
15   gtk_window_present (GTK_WINDOW (win));
16 }
17 
18 int
19 main (int argc, char **argv) {
   
   
20   GtkApplication *app;
21   int stat;
22 
23   app = gtk_application_new ("com.github.ToshioCP.lb1", G_APPLICATION_DEFAULT_FLAGS);
24   g_signal_connect (app, "activate", G_CALLBACK (app_activate), NULL);
25   stat =g_application_run (G_APPLICATION (app), argc, argv);
26   g_object_unref (app);
27   return stat;
28 }
29 

将这个程序保存到文件lb1.c中。然后编译并运行它。

$ comp lb1
$ . / a.out

将出现一个消息为“Hello.”的窗口。
在这里插入图片描述pr4.c和lb1.c之间只有很小的变化。程序差异有助于了解两个文件之间的差异。

$ cd misc; diff pr4.c lb1.c
4c4
< app_activate (GApplication *app, gpointer user_data) {
   
   
---
> app_activate (GApplication *app) {
   
   
5a6
>   GtkWidget *lab;
8c9
<   gtk_window_set_title (GTK_WINDOW (win), "pr4");
---
>   gtk_window_set_title (GTK_WINDOW (win), "lb1");
9a11,14
> 
>   lab = gtk_label_new ("Hello.");
>   gtk_window_set_child (GTK_WINDOW (win), lab);
> 
18c23
<   app = gtk_application_new ("com.github.ToshioCP.pr4", G_APPLICATION_DEFAULT_FLAGS
在已确认 `libcanberra-gtk3-module` 和 `libcanberra-gtk-module` 为最新版本后,若仍出现 `Failed to load module "canberra-gtk-module"` 错误,可尝试以下解决方法: #### 检查库文件路径 有时候系统可能无法正确找到库文件,可通过更新动态链接库缓来解决: ```bash sudo ldconfig ``` #### 检查 GTK 版本兼容性 部分应用可能对 GTK 版本有特定要求,若系统默认的 GTK 版本与应用所需版本不兼容,可能导致此错误。例如,Ubuntu 默认安装 GTK 3.0,而某些应用需要 GTK 2.0 版本,可安装 `gtk-2.0+` 版本的 `canberra`: ```bash sudo apt-get install libcanberra-gtk-module -y ``` #### 环境变量设置 可尝试设置 `GTK_MODULES` 环境变量,强制不加载 `canberra-gtk-module`: ```bash export GTK_MODULES="" ``` 若要永久生效,可将上述命令添加到 `~/.bashrc` 或 `~/.bash_profile` 文件中: ```bash echo 'export GTK_MODULES=""' >> ~/.bashrc source ~/.bashrc ``` #### 检查文件权限 确保 `libcanberra-gtk-module` 和 `libcanberra-gtk3-module` 文件具有正确的权限: ```bash sudo chmod 644 /usr/lib/x86_64-linux-gnu/gtk-2.0/modules/libcanberra-gtk-module.so sudo chmod 644 /usr/lib/x86_64-linux-gnu/gtk-3.0/modules/libcanberra-gtk3-module.so ``` #### 清理并重新安装 可尝试卸载 `libcanberra-gtk-module` 和 `libcanberra-gtk3-module`,然后重新安装: ```bash sudo apt-get remove libcanberra-gtk-module libcanberra-gtk3-module sudo apt-get install libcanberra-gtk-module libcanberra-gtk3-module ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值