GDI系统中的设备上下文包含一些基本元素,例如颜色,画刷,画笔或字体等等。wx.Colour定义设备上下文中对象显示的颜色。wx.Brush是一个用于填充区域的绘图工具,它用于绘制形状的背景,它有颜色和风格。wx.Pen用于绘制形状的轮廓,它有颜色、宽度和样式。wx.Font则是一个决定文本外观的对象。
一、wx.Colour简介
wx.Colour是表示红、绿、蓝(RGB)强度值和Alpha值组合的对象,用于确定绘图颜色。有效的RGB和Alpha值范围为0 ~ 255。
可以使用wx.Colour类来定义各种各样的颜色。例如可以使用SetTextForeground和SetTextBackground函数来定义一个设备上下文中文本的颜色,也可以使用wx.Colour来创建画笔和刷子。
有多种方法来创建wx.Colour对象,例如可以使用RGB三元色的值(0到255)来构建wx.Colour,或者通过一个标准的字符串,比如WHITE或者CYAN,或者从另外一个wx.Colour对象创建。还可以直接使用系统预定的颜色对象指针: wx.BLACK, wx.WHITE, wx.RED, wx.BLUE, wx.GREEN, wx.CYAN,和 wx.LIGHT_GREY等。使用wx.NullColour对象用来代表未初始化的颜色对象。
可以使用wx.SystemSettings类可以获取很多系统默认的颜色,比如3D表面颜色,默认的窗口背景颜色,菜单文本颜色等等。
下面列出了目前支持的标准颜色:aquamarine, black, blue, blue violet, brown, cadet blue, coral, cornflower blue, cyan, dark gray, dark green, dark olive green, dark orchid, dark slate blue, dark slate gray, dark turquoise, dim gray, firebrick, forest green, gold, goldenrod, gray, green, green yellow, indian red, khaki, light blue, light gray, light steel blue, lime green, magenta, maroon, medium aquamarine, medium blue, medium forest green, medium goldenrod, medium orchid, medium sea green, medium slate blue, medium spring green, medium turquoise, medium violet red, midnight blue, navy, orange, orange red, orchid, pale green, pink, plum, purple, red, salmon, sea green, sienna, sky blue, slate blue, spring green, steel blue, tan, thistle, turquoise, violet, violet red, wheat, white, yellow, 和 yellow green。
wx.Colour常用方法:
- Red(self):返回红色值。
- Green(self):返回绿色值。
- Blue(self):返回蓝色值。
- Alpha(self):返回alpha值,在不支持alpha的平台上,它总是返回wx.ALPHA_OPAQUE。
- GetRed(self):返回红色值。
- GetGreen(self):返回绿色值。
- GetBlue(self):返回蓝色值。
- GetRGB(self):获取单个32位值的RGB或RGBA颜色值。注意,GetRGB返回的值以0作为其最高字节,独立于Alpha实际返回的值。所以对于完全不透明的颜色,GetRGBA的返回值是0xFFBBGGRR,而GetRGB的返回值是0x00BBGGRR。
- GetRGBA(self):获取单个32位值的RGB或RGBA颜色值。注意,GetRGB返回的值以0作为其最高字节,独立于Alpha实际返回的值。所以对于完全不透明的颜色,GetRGBA的返回值是0xFFBBGGRR,而GetRGB的返回值是0x00BBGGRR。
- GetLuminance(self):返回颜色亮度值(公式: 0.299*R+0.587*G+0.114*B)。
- Set (self, red, green, blue, alpha=ALPHA_OPAQUE):使用给定值设置RGB值。
- Set (self, RGB):使用给定值设置RGB值。
- Set (self, str):使用类似html的语法:”#”后面跟着6个十六进制数字,分别表示红、绿、蓝分量的字符串来设置RGB值, 或者使用系统预定义的颜色字符串如wx.Colour(“pale green”)来设置。
- SetRGB(self, colRGB):从单个32位值设置RGB或RGBA颜色值。数colRGB和colRGBA应该分别采用0x00BBGGRR和0xAABBGGRR的形式,其中0xRR、0xGG、0xBB和0xAA是红色、绿色、蓝色和alpha分量的值。
- SetRGBA(self, colRGBA):从单个32位值设置RGB或RGBA颜色值。数colRGB和colRGBA应该分别采用0x00BBGGRR和0xAABBGGRR的形式,其中0xRR、0xGG、0xBB和0xAA是红色、绿色、蓝色和alpha分量的值。
二、演示
下面的例子演示了如何使用颜色值。
#颜色(wx.Colour)
import wx
class SampleColour(wx.Frame):
def __init__(self, *args, **kw):
super(SampleColour, self).__init__(*args, **kw)
self.InitUi()
def InitUi(self):
self.SetTitle("实战wxPython: GDI-颜色")
self.SetSize(400, 320)
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Centre()
def OnPaint(self, e):
dc = wx.PaintDC(self)
dc.SetPen(wx.Pen("#d4d4d4"))
dc.SetBrush(wx.Brush(wx.BLUE))
dc.DrawRectangle(30, 15, 90, 60)
dc.SetBrush(wx.Brush(wx.GREEN))
dc.DrawRectangle(150, 15, 90, 60)
dc.SetBrush(wx.Brush(wx.RED))
dc.DrawRectangle(270, 15, 90, 60)
dc.SetBrush(wx.Brush(wx.Colour("dark gray")))
dc.DrawRectangle(30, 105, 90, 60)
dc.SetBrush(wx.Brush(wx.Colour("magenta")))
dc.DrawRectangle(150, 105, 90, 60)
dc.SetBrush(wx.Brush(wx.Colour("medium goldenrod")))
dc.DrawRectangle(270, 105, 90, 60)
dc.SetBrush(wx.Brush('#5f3b00'))
dc.DrawRectangle(30, 195, 90, 60)
dc.SetBrush(wx.Brush('#4c4c4c'))
dc.DrawRectangle(150, 195, 90, 60)
dc.SetBrush(wx.Brush('#785f36'))
dc.DrawRectangle(270, 195, 90, 60)
def main():
app = wx.App()
sample = SampleColour(None)
sample.Show()
app.MainLoop()
if __name__ == "__main__":
main()
上面的实例我们使用三种不同的颜色设置方法进行画刷的颜色填充,使用DrawRectangle()方法绘制矩形。
图1:wx.Colour演示
三、本文知识点
- 了解设置wx.Colour演示的三种方法。
- 了解系统内建颜色字符串。
- 为画笔和画刷设置颜色。