LINUX.ORG.RU

как вывести картинку в GTK повторно?


0

1

Можно ли как-то сменить картинку на виджете не разрушая его, допустим, чтобы по кнопке «Up» чтобы грузился «2.png» ?

#include <gtk/gtk.h> #include <gdk-pixbuf/gdk-pixbuf.h> #include <gdk/gdkkeysyms.h>

static GdkPixbuf *image; static GtkWidget *win;

//реакция на кнопки static void which_key_press (GtkWidget *widget, GdkEventKey *event, gpointer data) { switch (event->keyval){    case GDK_Up: //?????             break;    case GDK_Down: //?????          break;       default:       break; } }

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

   image=gdk_pixbuf_new_from_file («1.png», NULL);           win = gtk_window_new(GTK_WINDOW_TOPLEVEL);    gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER_ALWAYS);    gtk_container_add (GTK_CONTAINER (win), gtk_image_new_from_pixbuf (image));        g_signal_connect (GTK_OBJECT(win), «destroy», gtk_main_quit, NULL);    g_signal_connect (G_OBJECT (win), «key_press_event»,          G_CALLBACK (which_key_press), NULL);

   gtk_widget_show_all(win);    gtk_main();    return 0; }


1. LORCODE
2. ...
3. PRFIT

trex6 ★★★★★
()
Ответ на: комментарий от baverman

> Как называется религия, которая не позволяет заглянуть в документацию GtkImage?

лень это называется.

тс - gtk_image_new_* ослилил, теперь осиливай gtk_image_set_*

ananas ★★★★★
()
Ответ на: комментарий от ananas

Спасибо за совет, нашел решение с gtk_image_set_from_pixbuf (), вот код:

#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gdk/gdkkeysyms.h>

static GdkPixbuf *image;
static GtkWidget *win;
static GtkWidget *gimage;

//реакция на кнопки
static void which_key_press (GtkWidget *widget, GdkEventKey *event, gpointer data)
{
  switch (event->keyval){
	case GDK_Up:
	
image = gdk_pixbuf_new_from_file ("1.jpg", NULL);
gtk_image_set_from_pixbuf (GTK_IMAGE(gimage), image);
g_object_unref(image);
		break;
	case GDK_Down:

image = gdk_pixbuf_new_from_file ("2.jpg", NULL);
gtk_image_set_from_pixbuf (GTK_IMAGE(gimage), image);
g_object_unref(image);
		break;		
    default:
		break;
  }
}

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

	image = gdk_pixbuf_new_from_file ("1.png", NULL);	
	gimage = gtk_image_new_from_pixbuf (image);
	
	win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER_ALWAYS);

	gtk_container_add (GTK_CONTAINER (win), gimage);
	g_signal_connect (GTK_OBJECT(win), "destroy", gtk_main_quit, NULL);
	g_signal_connect (G_OBJECT (win), "key_press_event",
  			G_CALLBACK (which_key_press), NULL);

	gtk_widget_show_all(win);
	gtk_main();
	return 0;
}

Однако про лень - это неверно, понятно, что я новичок в гтк. Решение - не мое, а подсмотренное, и должен сказать, что раздел GtkImage до этого есесно перелопатил весь. Сам бы я вряд ли догадался, что описание из мануала гтк референса «gtk_image_set_from_pixbuf () - Смотрите gtk_image_new_from_pixbuf() для деталей.» ведет нужному результату.

mm35
() автор топика
Ответ на: комментарий от mm35

Сам бы я вряд ли догадался

Тебя ждет много трудностей на этом тернистом пути. Мужайся.

baverman ★★★
()
Ответ на: комментарий от mm35

накой каждый раз дергать gdk_pixbuf_new_from_file? создал бы два пиксбуфа при инициализации, до и подпихывал бы их себе на здоровье

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.