转:wxPython中使用内嵌图标


在wxPython中,有几个内置的脚本工具可以用来做图片格式转换,在c:\Python26\Lib\site-packages\wx-2.8-msw-unicode\wx\tools\路径下,包括img2png.py、img2py.py、img2xpm.py。
可以使用这些脚本方便地转换图片,如以下两个命令,分别转换图片为.png格式和.xpm格式:

img2png.py
img2xpm.py

而img2py.py则可以将图片转换为内嵌于Python脚本的形式:

img2py.py -n AppIcon appname.icon images.py
img2py.py -n AppIcon2 -a appname2.icon images.py

第二条命令可以将appname2.icon生成的内嵌文本加在images.py文件中。
然后,就可以在Frame中设置图标了:

import images.py
class AppnameFrame(wx.Frame):
    def__init__(self,parent):
        wx.Frame.__init__(self,parent,-1,'Appname',size=(600,400))
        self.SetIcon(images.AppIcon.GetIcon())
# ...

使用内嵌图标的好处是图标包含在程序文本中,通过编译可以实现隐蔽性。

设置窗口图标wx.SetIcon
---------------------------------------------------

一种是使用已知的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('test.ico', wx.BITMAP_TYPE_ICO)
        self.SetIcon(self.icon)  
        self.list0 = ["a", "b", "c", "c", "e", "f", "g"]
        rb = wx.RadioBox(
                panel, -1, "a", wx.DefaultPosition, wx.DefaultSize,
                self.list0, 1, wx.RA_SPECIFY_COLS | wx.NO_BORDER )
        rb.SetToolTip(wx.ToolTip("a!"))
        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图标文件名称是:test.ico,与程序源文件保存在同一个文件夹下即可。

Archives