web-dev-qa-db-fra.com

Comment utiliser GDK avec Quickly

J'essaie d'utiliser la bibliothèque gdk pour réduire une image et l'appliquer à une image Gdk.

C'est le code pixbuf = Gdk.pixbuf_new_from_file(fileName) pixbuf = pixbuf.scale_simple(100, 100, Gdk.INTERP_BILINEAR)

Le problème est que python ne trouve pas Gdk même si j'utilise tout en minuscule

Erreur: pixbuf = Gdk.pixbuf_new_from_file (nomfichier) NameError: le nom global 'Gdk' n'est pas défini.

Je ne sais pas ce que je devrais faire car j'ai essayé d'importer Gdk mais rien n'a changé

7
max246

Essayez de l'importer comme ceci:

 from gi.repository import Gtk
 from gi.repository.GdkPixbuf import Pixbuf, InterpType

ensuite:

 pixbuf = Pixbuf.new_from_file(filename)
 pixbuf = pixbuf.scale_simple(100, 100, InterpType.BILINEAR)

Je vous recommande d'utiliser la commande ci-dessous, car il la redimensionne automatiquement à la lecture. Spécifiez simplement la taille (en pixels) de l'image que vous souhaitez:

 pixbuf = Pixbuf.new_from_file_at_size(size_x, size_y, filename)
  • Utiliser scale_simple () permet pas de conserver les proportions.
  • Utiliser new_from_file_at_size () préserve les proportions
10
unknownone

J'ai eu le même problème. Votre réponse a presque fonctionné pour moi, mais j'ai eu le message d'erreur suivant:

AttributeError: 'gi.repository.Gdk' object has no attribute 'INTERP_BILINEAR'

Mais j’en ai trouvé la définition ici gtkmm: gdkmm Enums and Flags :

Gdk::InterpType { 
  Gdk::INTERP_NEAREST, 
  Gdk::INTERP_TILES, 
  Gdk::INTERP_BILINEAR, 
  Gdk::INTERP_HYPER 
}

Donc, pour moi, cela a fonctionné quand j'ai appelé la fonction comme ceci:

from gi.repository import Gtk, Gdk
from gi.repository.GdkPixbuf import Pixbuf
...
pixbuf = Pixbuf.new_from_file('mypic.gif')
pixbuf = pixbuf.scale_simple(desired_width, desired_height, 2) # 2 := BILINEAR

... Peut-être que cela aide quelqu'un avec le même problème;)

0
Sebastian