实战wxPython:054 - 图片相关的类

wxPython支持四种和位图相关的类:wx.Bitmap, wx.Icon, wx.Cursor和wx.Image。wx.Bitmap是一个平台有关的类,它拥有一个可选的wx.Mask属性以支持透明绘画。wx.Icon用来实现各个平台上的图标,一个图标指的是一个小的透明图片,可以用来代表不同的frame或者对话框窗口。wx.Cursor则是一个用来展示鼠标指针的图像。wx.Image则是四个类中唯一的一个平台无关的实现,它支持24bit位图以及可选的alpha通道。

一、wx.Bitmap

wx.Bitmap类封装了和平台相关位图的概念,它可以是单色图像,也可以是支持alpha通道的彩色图像。

我们可以使用wx.Bitmap来做以下事情:

  • 通过设备上下文将其画在一个窗口上。
  • 在某些类(比如wx.BitmapButton, wx.StaticBitmap, 和wx.ToolBar)中将其作为一个图片标签。
  • 使用其作为双缓冲区(在将某个图形绘制到屏幕上之前先绘制在一块缓冲区上)。

wx.Bitmap的常用方法

  • ConvertToImage(self):转换成一个wx.Image,保留透明部分。
  • CopyFromIcon(selficon):从一个wx.Icon创建一个wx.Bitmap。
  • Create (self, width, height, depth=BITMAP_SCREEN_DEPTH):从图片数据或者一个给定的大小创建一个bitmap。
  • GetWidth(self):以物理像素为单位返回位图的宽度。
  • GetHeight(self):以物理像素为单位返回位图的高度。
  • GetSize(self):以物理像素为单位返回位图的大小。
  • GetDepth(self):返回位图的颜色深度。
  • GetSubBitmap(self, rect):只要rect完全属于当前位图,则返回当前位图的子位图。
  • GetMask(self):获取相关的掩码(如果有),该掩码可能已从文件加载或为位图设置。
  • SetMask(selfmask):设置位图的掩码。
  • LoadFile(selfnametype=BITMAP_TYPE_ANYdesiredWidth=-1desiredHeight=-1):从文件或资源中加载图标。
  • SaveFile(selfnametypepalette=None):使用指定的文件名保存位图。
#位图演示

import wx

class SampleBitmap(wx.Frame):

    def __init__(self, *args, **kw):
        super(SampleBitmap, self).__init__(*args, **kw)

        self.InitUi()

    def InitUi(self):
        self.SetTitle("实战wxPython: 位图")
        self.SetSize(400, 300)

		#self.SetIcon(wx.Icon("python-logo.png", wx.BITMAP_TYPE_ANY))

        self.isOff = True

        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)

        self.bmps = [wx.Bitmap("light_off.png", wx.BITMAP_TYPE_PNG),
                     wx.Bitmap("light_on.png", wx.BITMAP_TYPE_PNG)]
        
        self.image = wx.StaticBitmap(panel, wx.ID_ANY, self.bmps[0])

        btnSwitch = wx.Button(panel, wx.ID_ANY, label="切换")
        btnSwitch.Bind(wx.EVT_BUTTON, self.OnSwitch)

        vbox.Add(self.image, 1, wx.CENTER|wx.ALL)
        vbox.Add(btnSwitch, 0, wx.CENTER|wx.ALL)

        panel.SetSizer(vbox)

        self.Centre()

    def OnSwitch(self, e):
        id = e.GetId()
        if self.isOff:
            self.image.SetBitmap(self.bmps[1])
            self.isOff = False
        else:
            self.image.SetBitmap(self.bmps[0])
            self.isOff = True

def main():
    app = wx.App()
    sample = SampleBitmap(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()

 图1:wx.Bitmap演示

上面的代码演示了使用wx.Bitmap作为wx.StaticBitmap位图,当我们点击切换按钮时,wx.StaticBitmap的图标将在两个位图之间切换。

二、wx.Icon

wx.Icon图标是一个小的矩形位图,通常用于表示一个最小化的应用程序。它与wx.Bitmap的不同之处在于总是有一个与它相关联的掩码用于透明绘制。在一些平台上,图标和位图的实现是相同的,因为带掩码的wx.Bitmap和图标之间没有真正的区别;在某些平台上没有特定的图标格式(基于x的应用程序通常在xpm上对小位图和图标进行标准化)。但是,一些平台(如Windows)会做出区分,因此提供了一个单独的类。

wx.Icon图标的用途包括:

  • 设置wx.Frame窗口或者对话框的图标。
  • 通过wx.ImageList类给wx.TreeCtrl, wx.ListCtrl或者wx.Notebook提供图标。
  • 使用wx.DC.DrawIcon函数在设备上下文中绘制一个图标。

wx.Icon的常用方法

  • CopyFromBitmap(selfbmp):将bmp位图复制到此图标。在MS Windows下,位图必须设置掩码颜色。
  • GetWidth(self):以物理像素为单位返回位图的宽度。
  • GetHeight(self):以物理像素为单位返回位图的高度。
  • GetSize(self):以物理像素为单位返回位图的大小。
  • GetDepth(self):返回位图的颜色深度。
  • LoadFile(selfnametype=BITMAP_TYPE_ANYdesiredWidth=-1desiredHeight=-1):从文件或资源中加载图标。

在前面的例子中,我们可以给主窗口添加一个图标

#self.SetIcon(wx.Icon("python-logo.png", wx.BITMAP_TYPE_ANY))

去掉上面的注释,在运行程序,可以看到窗口左上角的图标已更换成我们设置的图标。

 图2:wx.Icon演示

三、wx.Cusor

光标用来指示鼠标指针当前的位置。可以给某个窗口指定不同的光标以便提示用户这个窗口期待某种类型的鼠标操作。和图标一样,光标也是一种始终带有透明遮罩的小图片,可以使用一般的构造函数或者是平台相关的构造函数来创建。其中的一些构造函数还需要相对于整个图片的左上角指定一个热点位置,当鼠标点击的时候,热点所在的位置将作为鼠标点击的位置。

wxPython系统提供的光标标识符

  • wx.CURSOR_ARROW:默认光标(即箭头向左)。
  • wx.CURSOR_RIGHT_ARROW:箭头向右。
  • wx.CURSOR_BLANK:透明光标/无光标。
  • wx.CURSOR_BULLSEYE:圆心。
  • wx.CURSOR_CROSS:十字。
  • wx.CURSOR_HAND:手指向上。
  • wx.CURSOR_IBEAM :文本编辑光标。
  • wx.CURSOR_MAGNIFIER:放大镜。
  • wx.CURSOR_NO_ENTRY :禁止进入。
  • wx.CURSOR_PAINT_BRUSH :画刷。
  • wx.CURSOR_PENCIL:铅笔。
  • wx.CURSOR_POINT_LEFT:手指向左。
  • wx.CURSOR_POINT_RIGHT:手指向右。
  • wxCURSOR_QUESTION_ARROW:带问号的箭头。
  • wx.CURSOR_SIZENESW:东北到西南伸缩。
  • wx.CURSOR_SIZENS:上下伸缩。
  • wx.CURSOR_SIZENWSE:西北到东南伸缩。
  • wx.CURSOR_SIZEWE:左右伸缩。
  • wx.CURSOR_SIZING:移动。
  • wx.CURSOR_WAIT:等待。
  • wx.CURSOR_ARROWWAIT:后台忙。

 图3:系统内建鼠标样式

四、wx.Image

wx.Image是一个平台无关的实现,它支持24bit位图以及可选的alpha通道。wx.Image可以从 wx.Bitmap类使用wx.Bitmap.ConvertToImage函数转换而来,也可以从各种各样的图片文件中加载,它所支持的图片格式也是可以通过图片格式处理器来扩展的。它拥有操作其图片上某些bit的能力,因此也可以用来对图片进行一个基本的操作。和wx.Bitmap不同,wx.Image不可以直接被设备上下文wx.DC使用,如果要在wx.DC上绘图,需要将wx.Image转换成wx.Bitmap,然后就可以使用wx.DC的 DrawBitmap函数进行绘图了。wx.Image支持设置一个掩码颜色来实现透明的效果,也支持通过alpha通道实现非常复杂的透明效果。

wx.Image常用方法

  • wx.Image(name, type=wx.BITMAP_TYPE_ANY):参数name是图像文件的名字,参数type是处理器类型,表示要读取图像的类型。如果type是wx.BITMAP_TYPE_ANY,那么wxPython将试图自动检测该文件的类型。
  • wx.Image(width, height, clear=True):生成指定大小的空图像。clear=True代表图像背景为黑色。
  • ConvertToBitmap(selfdepth=-1):将图像转换为wx.Bitmap。
  • ConvertAlphaToMask(self*args**kw):如果图像有alpha通道,此方法将其转换为蒙版。
  • ConvertToGreyscale(self*args**kw):返回图像的单色图。
  • GetSubImage(selfrect):返回当前图像的一个子图像,只要rect完全属于该图像。
  • GetWidth(self):以物理像素为单位返回位图的宽度。
  • GetHeight(self):以物理像素为单位返回位图的高度。
  • LoadFile(self*args**kw):从输入流加载图像。
  • SaveFile(self*args**kw):将给定流中保存为图像。
  • Scale(selfwidthheightquality=IMAGE_QUALITY_NORMAL):返回缩放的图像。
  • Rescale(selfwidthheightquality=IMAGE_QUALITY_NORMAL):通过缩放来改变图像的大小:调用此函数后,图像将具有给定的宽度和高度。
  • Resize(selfsizeposred=-1green=-1blue=-1):通过添加给定颜色的边框或根据需要进行裁剪,在不缩放的情况下就地更改图像的大小。
  • Rotate(selfanglerotationCentreinterpolating=TrueoffsetAfterRotation=None):以弧度角度旋转给定点的图像。
  • Rotate180(self):返回旋转180度的图像副本。
  • Rotate90(selfclockwise=True):返回按顺时针/反时针方向旋转90度的图像副本。
  • Mirror(selfhorizontally=True):返回图像的镜像副本。

三、本文知识点

  • 了解和使用wx.Bitmap。
  • 了解和使用wx.Icon。
  • 了解wx.Cursor。
  • 了解wx.Image。

前一篇: 实战wxPython:054 - 图片相关的类

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值