如何在wxpython中使用命名颜色?

2024-10-01 13:36:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我在wx中以这种方式命名颜色:

import wx.lib.colourdb as wb
wb.getColourList()

虽然“ORANGE”在wx.lib.colourdb中,但我不能将网格单元格的颜色设置为wx.ORANGE,因为它表示:

^{pr2}$

如何使用wx.lib.colourdb.getColourList()中定义的颜色?在


Tags: import网格定义颜色libas方式命名
2条回答

我只是在学习如何使用颜色数据库,并运行了这个线程,同时到处寻找提示和例子。所以现在你知道我不是这个话题的专家,但我将分享我迄今为止的发现。在

  1. 我不认为你需要做wx.lib.colorDB.updateColourDB()。我不使用它,对我来说数据库似乎已经被填充了。在我的Ubuntu12.04系统和wxpy2.8上。?,则在没有该命令的情况下,数据库初始化为630色。如果使用wx.lib.colorDB.updateColourDB()命令,然后计算颜色,我仍然只得到630种颜色。如果我打印颜色名称列表,不管我是否发布wx.lib.colorDB.updateColourDB()命令。

  2. 我也有一个问题,颜色都是白色的,但我试图通过递增for循环中的索引来访问颜色。我正在写一个制作二维饼图的应用程序,试图给画布画笔指定颜色,以便用不同的颜色填充饼图扇区。我使用了列表中的前6种颜色(对于6扇区的馅饼),发现整个馅饼都是白色的。最后我看了一下颜色表(DuHHH!)发现了问题。。。前7种左右的颜色都只是白色的色调稍有不同,彼此非常相似,看起来完全是同一种颜色。

我发现了两种不同的方法来解决这个“一切都是白色”的问题。第一个解决方案是使用Python的随机洗牌(顺序)。在

    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公司. 我可以做两种不同的方式,这取决于我是否洗牌的颜色列表。洗牌在列表中随机分布白色(ish)颜色,因此所有扇区都填充不同的颜色。这是代码的相关部分。在

^{pr2}$

我发现的另一个解决方案是洗牌颜色列表,而是将循环索引乘以画笔指定中的一个常量,如下所示。在

        dc.SetBrush(wx.Brush(self.colors[i * 10]))

上面的语句每隔10个颜色选择一个,这意味着第一个扇区将始终为白色,而其他扇区将是各种其他颜色。在

在我的旧电脑上,洗牌大约需要2秒,但速度很慢。每次应用程序运行时,扇区的颜色都与上次运行时不同。这可能是可取的,也可能不是,这取决于应用程序应该做什么。在

我希望每次应用程序运行时扇区都是相同的颜色,因为最终用户希望将特定颜色与特定数据集关联起来。因此,我使用第二种方法。虽然速度更快,但如果索引乘数是10,就像上面的例子一样,它将应用程序限制为63种颜色。我想我可以稍微修改一下循环,每6次迭代或者类似的方式改变乘法器,但是63种颜色对我来说已经足够了。在

color = wx.NamedColour("orange")

some_window.SetForegroundColour("orange") 

(请确保先启动应用程序)

为了将一些颜色加载到wx.TheColourDatabase中,您需要运行

^{pr2}$

相关问题 更多 >