我这样获取wx
中的命名颜色:
import wx.lib.colourdb as wb
wb.getColourList()
尽管 "ORANGE" 存在于 wx.lib.colourdb
中,但我不能将网格单元格的颜色设置为 wx.ORANGE
,因为它会提示:
AttributeError: 'module' object has no attribute 'ORANGE'
我该如何使用
wx.lib.colourdb.getColourList()
中定义的颜色?我这样获取wx
中的命名颜色:
import wx.lib.colourdb as wb
wb.getColourList()
尽管 "ORANGE" 存在于 wx.lib.colourdb
中,但我不能将网格单元格的颜色设置为 wx.ORANGE
,因为它会提示:
AttributeError: 'module' object has no attribute 'ORANGE'
wx.lib.colourdb.getColourList()
中定义的颜色?color = wx.NamedColour("orange")
some_window.SetForegroundColour("orange")
请确保您先启动应用程序。
为了将一些颜色加载到 wx.TheColourDatabase
中,您需要运行以下命令:
wx.lib.colourdb.updateColourDB() #adds ALOT more named colours to wx.TheColourDatabase
c1 = wx.NamedColour("light coral")
c2 = wx.NamedColour("peachpuff2")
我也在学习如何使用颜色数据库,偶然发现了这个帖子,在寻找提示和示例时。现在你知道我对这个主题不是专家,但我会分享我到目前为止所发现的。
我认为你不需要执行 wx.lib.colourdb.updateColourDB()。我没有使用它,对我而言,数据库似乎已经被填充了。在我的Ubuntu 12.04系统中,使用wxPy 2.8.?,该命令将数据库初始化为630种颜色。如果使用wx.lib.colourdb.updateColourDB() 命令,然后计算颜色数量,我仍然只得到630种颜色。如果我打印颜色名称列表,无论我是否发布wx.lib.colourdb.updateColourDB()命令,该列表似乎都有相同的颜色。
我也遇到了颜色全是白色的问题,但我尝试通过在for循环中递增索引来访问颜色。我正在编写一个应用程序,制作2D饼图,试图为画布刷子分配颜色,以便用不同的颜色填充饼扇区。我使用列表中的前6种颜色(用于6个扇区的饼),发现整个饼都是白色的。最后,我查看了颜色列表(DuHHH!),找到了问题......前7个或更多的颜色都只是略微不同的白色调,非常相似,以至于它们看起来是完全相同的颜色。
我发现了这个“所有东西都是白色”的问题的2种不同解决方案。第一种解决方案涉及使用Python的random.shuffle(sequence)对颜色列表进行洗牌。
import wx
from random import shuffle, seed
from wx.lib.colourdb import getColourList
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(1000, 1000))
# COMMENT 1 wx.lib.colourdb.updateColourDB()
i = 0
self.colors = []
for c in getColourList():
print c,
self.colors.append(c)
print self.colors[i]
i += 1
print 'Counted', i, 'colors'
seed() # seed the randomizer
shuffle(self.colors)
exit()
首先,尝试像上面那样,先保留第一个评论,然后再取消注释。我认为你会发现在两种情况下for循环打印的列表完全相同。
在我的应用程序中,更进一步地,我运行一个循环在wx.PaintDC上绘制饼状图的扇区。我可以使用2种不同的方式进行,具体取决于是否洗牌颜色列表。洗牌会将白色(ish)颜色随机分布在列表中,使得所有扇区填充不同的颜色。以下是相关代码的部分内容。
dc = wx.PaintDC(self.panel)
for i in range(sector_count):
dc.SetBrush(wx.Brush(self.colors[i]))
DrawNextPieSector(dc)
dc.SetBrush(wx.Brush(self.colors[i * 10]))