2010-03-23 25 views
9

Quiero cargar una imagen, cambiar su tamaño a un tamaño determinado y luego dibujarlo en una posición específica en un panel.¿Cómo cambiar el tamaño y dibujar una imagen usando wxpython?

Todo esto usando wxpython.

¿Cómo puedo hacerlo?

¡Gracias de antemano!

+0

gracias chicos, voy a tratar más adelante y dar la "respuesta Aceptado –

Respuesta

24

wx.Image tiene un método Scale que hará el cambio de tamaño. El resto es codificación wx normal.

Aquí hay un ejemplo completo para usted.

import wx 

def scale_bitmap(bitmap, width, height): 
    image = wx.ImageFromBitmap(bitmap) 
    image = image.Scale(width, height, wx.IMAGE_QUALITY_HIGH) 
    result = wx.BitmapFromImage(image) 
    return result 

class Panel(wx.Panel): 
    def __init__(self, parent, path): 
     super(Panel, self).__init__(parent, -1) 
     bitmap = wx.Bitmap(path) 
     bitmap = scale_bitmap(bitmap, 300, 200) 
     control = wx.StaticBitmap(self, -1, bitmap) 
     control.SetPosition((10, 10)) 

if __name__ == '__main__': 
    app = wx.PySimpleApp() 
    frame = wx.Frame(None, -1, 'Scaled Image') 
    panel = Panel(frame, 'input.jpg') 
    frame.Show() 
    app.MainLoop() 
+0

¿es posible hacer un evento onClick en la imagen? –

+1

Sí, solo enlaza EVT_LEFT_DOWN en el control StaticBitmap. – FogleBird

+0

funcionó. gracias m8 :) –

0

En primer lugar creo que el wxPython Docs y Demos hacen un trabajo gran que explica cómo utilizar sus bibliotecas, sobre todo porque las demostraciones se pueden jugar con sobre la marcha para ver el efecto o puede volver al estado original. Aquí está el enlace de Windows para descargar todos los archivos:

http://www.wxpython.org/download.php#binaries

Dicho esto, aquí está el código de ejemplo de la demo:

def runTest(frame, nb, log): 
    bmp = wx.Image(opj('bitmaps/image.bmp'), wx.BITMAP_TYPE_BMP).ConvertToBitmap() 
    gif = wx.Image(opj('bitmaps/image.gif'), wx.BITMAP_TYPE_GIF).ConvertToBitmap() 
    png = wx.Image(opj('bitmaps/image.png'), wx.BITMAP_TYPE_PNG).ConvertToBitmap() 
    jpg = wx.Image(opj('bitmaps/image.jpg'), wx.BITMAP_TYPE_JPEG).ConvertToBitmap() 

    panel = wx.Panel(nb, -1) 

    pos = 10 
    wx.StaticBitmap(panel, -1, bmp, (10, pos), (bmp.GetWidth(), bmp.GetHeight())) 

    pos = pos + bmp.GetHeight() + 10 
    wx.StaticBitmap(panel, -1, gif, (10, pos), (gif.GetWidth(), gif.GetHeight())) 

    pos = pos + gif.GetHeight() + 10 
    wx.StaticBitmap(panel, -1, png, (10, pos), (png.GetWidth(), png.GetHeight())) 

    pos = pos + png.GetHeight() + 10 
    wx.StaticBitmap(panel, -1, jpg, (10, pos), (jpg.GetWidth(), jpg.GetHeight())) 

    return panel 

Aquí se muestra cómo cargar una imagen y la muestra en un panel. Hay algunos objetos que no se explican aquí, pero deberían darle la esencia general.

+0

Eso no lo hace cambiar el tamaño de cualquier imagen. Acaba de pasar un tamaño que podría ser omitido. – FogleBird

+0

Ah, sí, tiene razón, eso solo le permite establecer un alto y ancho específico de la imagen, como se muestra, sin cambiar el tamaño de la imagen. Respuesta actualizada :) – Fry

1

Si se refiere a la adición de la imagen a una barra de herramientas/listbook/libro de herramientas, etc .. tendrá que convertirlo a un mapa de bits (por lo general sólo los mapas de bits permitido).

Por lo que yo sé, no puede cambiar el tamaño de un mapa de bits, por lo tanto, tendrá que cambiar el tamaño de una imagen antes de convertirla.

Aquí es un buen ejemplo http://markandclick.com/1/post/2011/12/wxpython-resize-embedded-bitmap-before-adding-it-as-a-tool.html

Aquí es una copia del ejemplo:

def getFolderBitmap(): 
    img = folder_icon.GetImage().Rescale(scaleW, scaleH) 
    return img.ConvertToBitmap() 
Cuestiones relacionadas