颜色是一个表示结合了不同强度值(intensity value)的红光(Red)、绿光(Green)以及蓝光(Blue)的对象. RGB 的有效值是 0-255 的整数值.
有三种方式来设置颜色。
可以创建一个 wx.Colour 对象,也可以使用一个预定义的颜色名字,还可以使用一个十六进制的字符串。
专题教程:wxpython中文教程
例子:
WxPython中预定义的颜色名字有:
wx.BLACK
wx.WHITE
wx.RED
wx.BLUE
wx.GREEN
wx.CYAN
wx.LIGHT_GREY
标准颜色数据库:
这个 colours.py 程序展示了 8 种不同的颜色. wx.BLACK 简单. 海洋蓝富有诗意.
而 #0000FF 则显得十分具有技术感. 选择何种颜色,取决于开发者本人.
例子:
#!/usr/bin/python
#coding=utf-8
#colours.py
import wx
class Colours(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title, size=(300, 300))
vbox = wx.BoxSizer(wx.VERTICAL)
self.pnl1 = wx.Panel(self, -1)
self.pnl2 = wx.Panel(self, -1)
self.pnl3 = wx.Panel(self, -1)
self.pnl4 = wx.Panel(self, -1)
self.pnl5 = wx.Panel(self, -1)
self.pnl6 = wx.Panel(self, -1)
self.pnl7 = wx.Panel(self, -1)
self.pnl8 = wx.Panel(self, -1)
gs = wx.GridSizer(
gs.AddMany([
(self.pnl1, 0, wx.EXPAND),
(self.pnl2, 0, wx.EXPAND),
(self.pnl3, 0, wx.EXPAND),
(self.pnl4, 0, wx.EXPAND),
(self.pnl5, 0, wx.EXPAND),
(self.pnl6, 0, wx.EXPAND),
(self.pnl7, 0, wx.EXPAND),
(self.pnl8, 0, wx.EXPAND)
])
vbox.Add(gs, 1, wx.EXPAND | wx.TOP, 5)
self.SetSizer(vbox)
self.SetColors()
self.Center()
self.ShowModal()
self.Destroy()
def SetColors(self):
self.pnl1.SetBackgroundColour(wx.BLACK)
self.pnl2.SetBackgroundColour(wx.Color(139, 105, 20))
self.pnl3.SetBackgroundColour(wx.RED)
self.pnl4.SetBackgroundColour('#0000FF')
self.pnl5.SetBackgroundColour('sea green')
self.pnl6.SetBackgroundColour('midnight blue')
self.pnl7.SetBackgroundColour(wx.LIGHT_GREY)
self.pnl8.SetBackgroundColour('plum')
app = wx.App(0)
Colours(None, -1, 'colours.py')
app.MainLoop()
如图:
图:colours.py
完整的颜色数据库包含了大约 630 种不同的颜色名字.
该清单可在 colourdb.py 程序文件中找到.wxPython 的演示程序中也有展示.
下面的 randocolours.py 程序中有一个独立窗口. 我们将随机选择颜色来作为该窗口的背景颜色.
例子:
#!/usr/bin/python
#coding=utf-8
#randomcolours.py
import wx
from random import randrange
from wx.lib.colourdb import *
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(400, 350))
self.panel = wx.Panel(self, -1)
self.colors = getColourList()
self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)
self.timer.Start(500)
self.col_num = len(self.colors)
self.Center()
def OnTimer(self, event):
self.panel.SetBackgroundColour(wx.RED)
position = randrange(0, self.col_num-1, 1)
self.panel.SetBackgroundColour(self.colors[position])
self.panel.Refresh()
class MyApp(wx.App):
def OnInit(self):
updateColourDB()
frame = MyFrame(None, -1, 'randomcolours.py')
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()