盖天00

wxpython 设置图标

般有两种方法。
一种是使用已知的ico格式的图标:
#!/usr/bin/evn python
# -*- coding: cp936 -*-

import wx
import shutil
import os

class Create_Frame( wx.Frame ):
    def __init__( self, parent, ID, title ):
        wx.Frame.__init__( self, parent, ID, title, size = ( 380, 250) ,
                           style = wx.DEFAULT_FRAME_STYLE|wx.STAY_ON_TOP )
        panel = wx.Panel( self, -1 )
        self.icon = wx.Icon('lihf.ico', wx.BITMAP_TYPE_ICO)
        self.SetIcon(self.icon)  
        self.list0 = ["中国", "美国", "俄罗斯", "日本", "韩国", "英国", "澳大利亚"]
        rb = wx.RadioBox(
                panel, -1, "北京奥运", wx.DefaultPosition, wx.DefaultSize,
                self.list0, 1, wx.RA_SPECIFY_COLS | wx.NO_BORDER )
        rb.SetToolTip(wx.ToolTip("北京加油!"))
        rb.Bind(wx.EVT_RADIOBOX, self.Print, rb)
    def Print( self, event ):
        ID =  event.GetInt()
        print self.list0[ID]
        
if __name__ == '__main__':

    app = wx.PySimpleApp()
    frame = Create_Frame(None, -1, "new frame")
    frame.Show( True )
    app.MainLoop()
本例中ico图标文件名称是:lihf.ico,与程序源文件保存在同一个文件夹下就可。

第二种方法是:
import wx
import shutil
import os
import cStringIO

def GetMondrianData():
    return \
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\
\x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x00qID\
ATX\x85\xed\xd6;\n\x800\x10E\xd1{\xc5\x8d\xb9r\x97\x16\x0b\xad$\x8a\x82:\x16\
o\xda\x84pB2\x1f\x81Fa\x8c\x9c\x08\x04Z{\xcf\xa72\xbcv\xfa\xc5\x08 \x80r\x80\
\xfc\xa2\x0e\x1c\xe4\xba\xfaX\x1d\xd0\xde]S\x07\x02\xd8>\xe1wa-`\x9fQ\xe9\
\x86\x01\x04\x10\x00\\(Dk\x1b-\x04\xdc\x1d\x07\x14\x98;\x0bS\x7f\x7f\xf9\x13\
\x04\x10@\xf9X\xbe\x00\xc9 \x14K\xc1<={\x00\x00\x00\x00IEND\xaeB`\x82' 


def GetMondrianBitmap():
    return wx.BitmapFromImage(GetMondrianImage())


def GetMondrianImage():
    stream = cStringIO.StringIO(GetMondrianData())
    return wx.ImageFromStream(stream)


def GetMondrianIcon():
    icon = wx.EmptyIcon()
    icon.CopyFromBitmap(GetMondrianBitmap())
    return icon


class Create_Frame( wx.Frame ):
    def __init__( self, parent, ID, title ):
        wx.Frame.__init__( self, parent, ID, title, size = ( 380, 250) ,
                           style = wx.DEFAULT_FRAME_STYLE|wx.STAY_ON_TOP )
        panel = wx.Panel( self, -1 )

        self.SetIcon(GetMondrianIcon())
        
        self.list0 = ["中国", "美国", "俄罗斯", "日本", "韩国", "英国", "澳大利亚"]
        rb = wx.RadioBox(
                panel, -1, "北京奥运", wx.DefaultPosition, wx.DefaultSize,
                self.list0, 1, wx.RA_SPECIFY_COLS | wx.NO_BORDER )
        rb.SetToolTip(wx.ToolTip("北京加油!"))
        rb.Bind(wx.EVT_RADIOBOX, self.Print, rb)
    def Print( self, event ):
        ID =  event.GetInt()
        print self.list0[ID]
        
if __name__ == '__main__':

    app = wx.PySimpleApp()
    frame = Create_Frame(None, -1, "new frame")
    frame.Show( True )
    app.MainLoop()

该方法的图标是由固定代码组成的。


评论