Python Forum
[WxPython] Embedding an image into source code and displaying in a wx.Frame
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[WxPython] Embedding an image into source code and displaying in a wx.Frame
#1
Grab the following python logo image
[Image: 110px-Python-logo-notext.svg.png]
from https://upload.wikimedia.org/wikipedia/c...xt.svg.png

To embed this image into python source code use img2py.py from wx tools
img2py.py Wrote:Convert an image to PNG format and embed it in a Python module with appropriate code so it can be loaded into a program at runtime.
The benefit is that since it is Python source code it can be delivered as a .pyc or 'compiled' into the program using freeze, py2exe, etc.

from wx.tools import img2py

image_file = '110px-Python-logo-notext.svg.png'
python_file = 'python_logo.py'

img2py.img2py(image_file=image_file, python_file=python_file,
              imgName='get_python_logo', icon=True)
This creates the following python file
python_logo.py
from wx.lib.embeddedimage import PyEmbeddedImage

get_python_logo = PyEmbeddedImage(
    b'iVBORw0KGgoAAAANSUhEUgAAAG4AAABuCAYAAADGWyb7AAAABGdBTUEAALGPC/xhBQAAACBj'
    b'SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+g'
    b'vaeTAAAAB3RJTUUH4QgKBhw1+kgs7gAADjFJREFUeNrtnX2YVNV5wH/vmVmWRb6CloiIShoB'
    b'g1tBFncBNSBLDM0HSOqagGiMpqkxqSbpYx7ENtPWGNNWik+e+FATtTUfRpeighJtgl3tVmZB'
    b'VIRVqjEGQclGgYfwtR9zz9s/Znd2Z+bOzJ3Z+dqZOX/M7tyPc+59f/e8533f894zwlApgYCZ'
    b'3Vl7jhj/eaJ6HuhEgfFqdQLCeKAGGANqgGqUEaAW5Ei4AnsYBaAD9ADIfsG+p1b3imHnpLfN'
    b'G83NTc5QEYcU64Ut/vrm6oNjQvN8VucrLEB1Vi8cQMMM+j/o206i7RpzDIBGHXMCeFWQrSib'
    b'j46U59sDTd0VcB5Lw+2b5qtlJdhlAmNdBJwLaC7n6lHgKUH+LfgvX2ipgEtQ6ldvXGKU2xXq'
    b'kgk4P9Ditr+myB3b7v7CL0C0Ag6Yu/qpsy3OOpRPphJwgaAN3B60jty4fe2KV8oa3NzVT1xq'
    b'kcdQxg0BaH1fOxG9ue3ulfcVUna+AkN7BmXUEIIGqB/4zMQ5y3h362PPlRW42YGnTherz6GM'
    b'HmLQ+lWV6vwzG6744N3gY9sLIUNTkKelx96FcmoSAStoC+idIP8AbAacYoHWV6cKd9ff/B9/'
    b'VggZ+vOuIgMbxttulkcLqF8YAgestU1t31/WOnB33W0bzvdZ1gNTsw7N7VwPdQpajeFuYFHJ'
    b'9zjt8X0cbJUbNKDbsXZxLDSAF+9cttv6zCKUw8UAbUCdjbNveXBG6YOzTE4ADdCfbPv+sp2J'
    b'zt3+3aX7VLmniKABik+5svTBhWOJrsKwqs+kvGCfPl1M0MIXJfUlD07EaGLr0fzRg+N5pKig'
    b'ha9+QulblaqayOQ3OFNSnW6tTi0maKBgZVgZuAM2oZ+myJcIBJJekyg3FBW08LZQ+ahKN+da'
    b'mFHfWXtHonMvunX9Xyl8urigxW4vUT/Oqqokj4isqv/2+qli5bvBf/7cSwB1tz461SB/I+j1'
    b'FWgFAhcth0RCYpkaXVb/7fUnQS3KKcWnHgsHrWDg0gg51RSdIZKozrKwKvMRMM4ntAJ0vAIY'
    b'JwOlVIE2hNyB0oJWqFEu7+CsDrjdkoBWJlalEfaq8ut4IdlITCuWtLuArWsHjgpFib1ArPxJ'
    b'qUFzE1NJlfpv/uwx0KW5hiaqe9p+8OXzymSMy/NYmquepmXkgOdxRC0INP3Nkkn0hMYnvq6e'
    b'3q5qenA6fyvTW47lBdycbzxaI8P9M6zIVIVTjTXDFLWuAosqTgK52uSCt0mAJNxlUZiSH2gx'
    b'AJ3QrRj9mqvLoNqv6FRBqtH2y/cgbET5kUx/5jfZBRcImIaeGZ9C5QZFF6lSg4YHSRXrMRtL'
    b'EghJEghDEghYCms9qteoiRs0l33CNNBpwLd09+UPUm1uk3N/+f6gx7iG2x9vbOieuQuVjaCf'
    b'RftevghfQF5T6Apt8iesM/nwmtxxj3z3IfYGukM7dfflCzLucYu/vrn68Kief8VyY6IGK9AS'
    b'kNMk7SjJr0GZAPYZbV+4XKZvWZ9Wj6sPbB59eFTPs1CBlja0mMniNKH1fa9C5WFtX/hJz+Bm'
    b'BTaNoLtnEzC3Ai1daHhoJyW0vj9+rPxc2+d/1BO4qi59QODSCrRsQXOJ7qSG1vuhH8Kaf1eN'
    b'DpbEgatf9fh1iF7l3kCJQtPBQFN3fy6ZSvQMLRK7m8fuy65OCG5WYNNpIrI2UQMlC43BQEsx'
    b'xKWafE0JLVLH97T9ymGu4Kq67CpgdAXaIKB5GsfShBYuE+k5eFUcuHm3PnEGwo0VaJlA0zSg'
    b'JdCpyaH1Rln4Rhw4x6/XueV4VKClhqbC8Thdmc445gVa+J+ZunP++bGq8uoKtMx6mlgOu49x'
    b'2YQW2b80Aq5+9cYGlGkVaBmoRwUV/UOM/hvpeRxLC5oCekUEnFH98wq0zKCF3x1gR5SART/k'
    b'zfhIFxqAzNT2OeNMeJteUoGWITTA+qQtpsdN8GYxpgst7NTRU1VnpgceHQZ6UQVaZtBA9k/u'
    b'ODUYOeLFWVUotWlZjN6h9cVBZptRXcNmAiMq0DKBBmB/HLV4W8246UBNRsaHF2jhh6XOiDC1'
    b'Ai1TaPoHJ+RfGy1tWZJbaACc63esThYq0DKAhsJf77jvK0diJL48IzPfMzQFy1l+g05WT1MR'
    b'5QYt+ZgkcNe2e296JEpy7Y0XA1PS983UO7RwRscoo/CRCrS0of1j2703rYrvKuY7OYfW+78f'
    b'BiyAVoGWCtrvFf5y2703bYrTbu2NTag2ZgwN79AA/KiOCKdqVaAlFrrsB/vjqs7ha/73geuP'
    b'xkHb84nJhHTdoKClmd7gRxhRgRYHzVF4DWErlubtH+54lkDANZlT9yw6gxC/gt5oyaCg4Tkn'
    b'xR9edLpooO0DtqO8gmiHWj0sRo4INiy02DcdQuGN/U6UDNwRXyS2Eun9Gj7eOL5OR5331fHt'
    b'23HfV06Qomh740xCbAA9JyvQUskrZowbUWBoR1HuN0Yf2rrm2pcZAkXfahxDl6zCcgtQ7SkW'
    b'mabxkWpayA/qEFm3Mr/QBO5X61/dds/yjqKHpQFDe3AWYlfSqSviVrXNI7TwGAcngWF5hnZc'
    b'RK8Prrn2kZQCe3PZmfhC56GMB04DGe767oCNfLgXx/UEl68DXxSRsWDHAdN47YWZiI5KO+qf'
    b'LrQ4Abi35QftBMbkEVo32GXBNV/8L/cn+0ofb/csBL0G5DJwJvS/K9BXryS4JkksSEkhSHF5'
    b'wsVmkJHF4KCl7HkRVcmJfKpHVfnitrXx0PTNxdX4h3+VvT3fBM6kz0fxdKPZMMPxKLhM284e'
    b'tD5wJ/NoiPxk29qVD8cP9ktqMeZnoLVR0/6eb5QcqqwCQCN1WwbL7/ME7SQhc1sctN8u+QzG'
    b'tIHWDjJdO7vQtIDQNPXD6Rdhn+bHT/tR2w+u3h8N7YpFGDag6k9fbQwFaGQJWtw+axTeyYdz'
    b'Lcq6OGtR+EVxQktg2mVtPPWaSJRw33tGxO7LQ0Tk1eDaa16Puh6//hPouPR1fZ4sOtenP4/Q'
    b'kratbxknxP/lPvYoLVH3tHfJx0A/n9SiK7pxpmiggbLHnDJKXgq7pzkMGFuN/jUMNdcR9dpQ'
    b'ERsHFBAaCTSKSKtpCTQdA92Tyyi/MTZ6SXqrS9PyzQoJTXPkI6Z7L1Grrpvn+1LQt+dyasbp'
    b'Nu/1x/+vHAf8aUYOdd6h5dBHzBQa/E7qWt8x4ckNfTqX82nbfnjNof6YYdcF9K2DkTNoZAna'
    b'IHIfsxntGbjP6kboTUEfftz3FNCZC2gRZyDSsO+0jKIghRxntIDQ4trWhyLgWu5tOgZsydnM'
    b'dXSYfmxhxpligTYI9QuvS0Pbjgi4cJ+wD+Q23SBSqockNHLoI3q+F4n8rlAE3KR3qp5QeCvH'
    b'0AZ3M4Wy6JL2vHxB421G/vHBOHDNzU0OomuzD02TsssoClLwcSbv0EBYJdPbu+PAAYwYecY6'
    b'YBdaDNA8LnqWT2jk0N1Idi/KBrkoGJUtEAWuJbAghHKz62iaLWg2iw51vqFlkEaXhft8Bytf'
    b'jhVj3AI1bWtW/DdwV7bzHrMeBcm3Reep7axDex/VxTJ366GU4ADO2jfsbwV9MjfQyI5DXYhx'
    b'xovFnT1o+3BkoTS0veYmPldwzc1NztHRwz+H6obBQtOsQBtcunZWoeUnJ2ULVVWzZO7WXYme'
    b'+4TLHrYHmrprxky6SkT/vjf3cvBp4dmOgpQMNPpNfmQ5FwUXyYX/k/kKsS2BBaHgmmsDYmUe'
    b'Smt2oNnsOdSFgpZVK5lDWH0E1aXsnXSu1G99WCT1YlOe1mQO3nNNG3DJ7JsfnG2EFcB8lKnA'
    b'8PSgkT1oXp5+5UaMHAwnwzrJr0f6pgedFIfKgD/Jjh0w3SgDDnIAUQfkID7e5cKtb/WDasNr'
    b'SWsV9O33XLcdCE+KBgLm4o5zx/TvPeK9onzlPtrQk1Lbsp8SLJn/7kAgYFuJWQrJS3GiJwty'
    b'mvtYwqWwv/SR8zS60i3+0oWmYHy7dVejjfsRpWzOKvRag1LXOqv0weUv93FM7+RjbqD1n3eo'
    b'vFTloKAVWRpd6YNzShGalE+PK6XcR7VlAq5o0+jIbnpDSRknNkaxZHNeK3thrTdADqF6Dujp'
    b'KaGJSOmDy6lxMGhov8TYW2RG6xu9pwgvXXw58EOUjyRJYiojcMWXRtfMzOc/L9Lv8IVjiK1P'
    b'a7B+Ln5/G3C2a/02/+rSVKABcAxrvjoQ2sAiDW0dqH4rYf1SDlalalXOoGVqBKn+WupaPkh6'
    b'3dK1EdVj7vVLGYAzejJnFl2maXTCvlSXLXU7ehAOuNdvKYcet78Icx/He9DuJnJcfP2mDHpc'
    b'dRCNCp8UPvdRWKTt80cmve4XGy4jEvuMrU+6Sh6cTN30AcKvcgYtk9xH1XF0Ot9L2Nt2fuIU'
    b'MGuSGFVvlIdVabmz+HIf9Wu6Y946fXn+2Kgmgpd8jO5jz6Jam6StJ/PeAQrmxrUveghkZRFm'
    b'ZJ3oTYw6SPjN2TpUTZK2OjhR81FZ0HKsPMDt+ewonJMvAOcP0dzH8E4rfyFzghvKQ1UCMm3j'
    b'UaxtRHl9aEBzGTOt/F0hoBUUHIDUbumgp2cuqo9nHRo59BHREMpNMid4R8FkRxEUVYTdC78E'
    b'3AGcnoHKGtQSgmlCewUr18uc4EuFlJkpBnAiqNRuuZ+qziko30E5UHzQpB3sCvaeVVdoaEXT'
    b'4+J64IuzqqgefQUqK1BdCJySEbRYMOlDO4TynxjzU2a/0JooCF0B5wbxzcXVHO/6ODgLEbkQ'
    b'ZQZwWhaXEOyDpMDvQHYBz6Oh59h79svS1OwUo1yKHpwrzF2XTqLHNwWciYhORJiAyoexjEXU'
    b'hENTGNDRoMdALMoJRLtQ6QJ9H+wBLB2IdOA4b1Jzco9c8OrxoSKD/weQ8i7cArqaQAAAACV0'
    b'RVh0ZGF0ZTpjcmVhdGUAMjAxNy0wOC0xMFQwNjoyODo1MyswMDowMAPxhVgAAAAldEVYdGRh'
    b'dGU6bW9kaWZ5ADIwMTctMDgtMTBUMDY6Mjg6NTMrMDA6MDByrD3kAAAAAElFTkSuQmCC')
This file can be imported into your GUI code and converted back into an image for displaying as a frame icon, or on a button etc.
import wx

from python_logo import get_python_logo


class ImageFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.SetIcon(get_python_logo.GetIcon())
        self.main_logo_image = wx.Image(get_python_logo.getImage())
        self.panel = wx.Panel(self)
        self.create_main_logo_static_bitmap()
        self.create_spin_button()
        self.add_sizers()
        self.SetInitialSize((300, 250))

    def create_main_logo_static_bitmap(self):
        self.static_bitmap = wx.StaticBitmap(
            self.panel, bitmap=self.main_logo_image.ConvertToBitmap())

    def create_spin_button(self):
        scaled_image = self.main_logo_image.Scale(
            32, 32, wx.IMAGE_QUALITY_HIGH)
        button_bitmap = scaled_image.ConvertToBitmap()
        self.spin_button = wx.Button(self.panel, label='Spin Logo')
        self.spin_button.SetBitmap(button_bitmap)
        self.spin_button.SetBitmapMargins(2, 2)
        self.spin_button.SetInitialSize()
        self.spin_button.Bind(wx.EVT_BUTTON, self.on_spin_button)

    def add_sizers(self):
        frame_sizer = wx.BoxSizer(wx.VERTICAL)
        frame_sizer.Add(self.panel, 1, wx.EXPAND)
        self.SetSizer(frame_sizer)

        main_sizer = wx.BoxSizer(wx.VERTICAL)
        self.panel.SetSizer(main_sizer)
        main_sizer.AddSpacer(20)

        image_sizer = wx.BoxSizer(wx.HORIZONTAL)
        image_sizer.AddStretchSpacer(1)
        image_sizer.Add(self.static_bitmap)
        image_sizer.AddStretchSpacer(1)
        main_sizer.Add(image_sizer, flag=wx.EXPAND)
        main_sizer.AddSpacer(20)

        button_sizer = wx.BoxSizer(wx.HORIZONTAL)
        button_sizer.AddStretchSpacer(1)
        button_sizer.Add(self.spin_button)
        button_sizer.AddStretchSpacer(1)
        main_sizer.Add(button_sizer, flag=wx.EXPAND)

        main_sizer.AddSpacer(20)

    def on_spin_button(self, event):
        self.main_logo_image = self.main_logo_image.Rotate90()
        self.static_bitmap.SetBitmap(self.main_logo_image.ConvertToBitmap())


if __name__ == '__main__':
    wx_app = wx.App(False)
    frame = ImageFrame(None, title='Image Frame')
    frame.Show()
    wx_app.MainLoop()
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020