Emin Mastizada
Emin Mastizada

Reputation: 1405

wxPython image with url

I have image in app using wx.StaticBitmap, but I need to add url to image, when you click image it should open that url using default browser of system. How to place such image?

Upvotes: 0

Views: 994

Answers (1)

Mike Driscoll
Mike Driscoll

Reputation: 33111

You will need to bind your instance of wx.StaticBitmap to wx.EVT_LEFT_DOWN and use Python's webbrowser module to open the url. You could create a dictionary of images where each image maps to a URL. Then when you load an image, you set a variable to that image's path and use that as your key in the dictionary to load the URL when the image is clicked.

Here's a fairly simple example:

import webbrowser
import wx

########################################################################
class ImgPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        self.my_images = {"/path/to/image.jpg":"www.example.com"}
        self.loaded = "/path/to/image.jpg"

        img = wx.Image(self.loaded, wx.BITMAP_TYPE_ANY)

        self.image_ctrl = wx.StaticBitmap(self, bitmap=wx.BitmapFromImage(img))
        self.image_ctrl.Bind(wx.EVT_LEFT_DOWN, self.onClick)

    #----------------------------------------------------------------------
    def onClick(self, event):
        """"""
        webbrowser.open(self.my_images[self.loaded])

########################################################################
class MainFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Images")
        panel = ImgPanel(self)
        self.Show()

if __name__ == "__main__":
    app = wx.App(False)
    frame = MainFrame()
    app.MainLoop()

Upvotes: 1

Related Questions