c - 如何在 gtk 中刷新图像?

标签 c gtk

如果我创建一个应用程序,像这样:

--------------------------------
image 1|image 2|image 3| (button)
--------------------------------

我希望在单击按钮时更改应用程序图像:

----------------------------------
image A|image B|image C| (button)
----------------------------------

我该如何实现?

这是我的代码:

#include <gtk/gtk.h>
static GtkWidget *image1,*image2,*image3;
static GtkWidget *window;
static GtkWidget *hbox;
static GtkWidget *button;

static void buttonefresh(GtkWidget *button ,gpointer data)
{
  image1 = gtk_image_new_from_stock(GTK_STOCK_QUIT,GTK_ICON_SIZE_MENU);
  image2 = gtk_image_new_from_stock(GTK_STOCK_QUIT,GTK_ICON_SIZE_MENU);
  image3 = gtk_image_new_from_stock(GTK_STOCK_QUIT,GTK_ICON_SIZE_MENU);

  gtk_box_pack_start (GTK_BOX (hbox), image1, FALSE, TRUE, 0);
  gtk_box_pack_start (GTK_BOX (hbox), image2, FALSE, TRUE, 0);
  gtk_box_pack_start (GTK_BOX (hbox), image3, FALSE, TRUE, 0);
  gtk_widget_show (window);
 }

int main(int argc, char **argv)
{
  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title (GTK_WINDOW (window), "Image Refresh");

  g_signal_connect (G_OBJECT (window), "destroy",
                    G_CALLBACK (gtk_main_quit), NULL);
  hbox = gtk_hbox_new (FALSE, 5);
  button=gtk_button_new_with_label("Refresh");

  g_signal_connect (G_OBJECT (button), "clicked",
                    G_CALLBACK (buttonefresh), NULL);
  g_signal_connect (G_OBJECT (button), "destroy",
                    G_CALLBACK (gtk_main_quit), NULL);

  image1 = gtk_image_new_from_stock(GTK_STOCK_OPEN,GTK_ICON_SIZE_MENU);
  image2 = gtk_image_new_from_stock(GTK_STOCK_OPEN,GTK_ICON_SIZE_MENU);
  image3 = gtk_image_new_from_stock(GTK_STOCK_OPEN,GTK_ICON_SIZE_MENU);

  gtk_box_pack_start (GTK_BOX (hbox), image1, FALSE, TRUE, 0);
  gtk_box_pack_start (GTK_BOX (hbox), image2, FALSE, TRUE, 0);
  gtk_box_pack_start (GTK_BOX (hbox), image3, FALSE, TRUE, 0);
  gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0);
  gtk_container_add (GTK_CONTAINER (window), hbox);
  gtk_widget_show_all (window);
  gtk_main ();

  return 0;
}

最佳答案

在您的点击回调中,只需调用任何改变图像的 GtkImage 方法,例如 <a href="http://library.gnome.org/devel/gtk/stable/GtkImage.html#gtk-image-set-from-image" rel="noreferrer noopener nofollow">gtk_image_set_from_image()</a> .

您可能需要使用 gpointer user_data 传递足够的数据参数,以便回调知道要更改哪个 GtkImage 实例,以及将其更改为什么。

您应该不需要重新创建 GtkImage 小部件,只需更改显示的图像即可。

关于c - 如何在 gtk 中刷新图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1763008/

相关文章:

c - 如果包含另一个句子字符串,则从中删除该单词字符串

c - Gtk+ 3.0 : undefined reference 中的 GtkGlArea

c - GHashTableIter 将 GtkSpinButton 设置为可调整

c - 错误: unknown type name ‘GTKWidget’

c - 为什么在 Linux mint 15 中执行 C 程序时会出现错误 "bash: ./a.out: Permission denied"

c - 如何初始化数组并填充缓冲区中的字符?

c - 如何用关键操作替换ClutterTexture?

python - 如何将数据从 Gtk 对话框传递/返回到主应用程序类

c - 自定义 shell 中的 I/O 重定向和管道

c - 在 unix 系统上确定符号链接(symbolic link)