Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在wxpython中使用命名颜色?_Python_User Interface_Colors_Wxpython - Fatal编程技术网

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

如何在wxpython中使用命名颜色?,python,user-interface,colors,wxpython,Python,User Interface,Colors,Wxpython,我通过以下方式在wx中获得命名颜色: import wx.lib.colourdb as wb wb.getColourList() 虽然“橙色”在wx.lib.colordb中,但我无法将网格单元格的颜色设置为wx.ORANGE,因为它显示: AttributeError: 'module' object has no attribute 'ORANGE' 如何使用wx.lib.colordb.getcolorlist()中定义的颜色 (请确保先启动应用程序) 要将一些颜色加载到wx.Th

我通过以下方式在
wx
中获得命名颜色:

import wx.lib.colourdb as wb
wb.getColourList()
虽然“橙色”在
wx.lib.colordb
中,但我无法将网格单元格的颜色设置为
wx.ORANGE
,因为它显示:

AttributeError: 'module' object has no attribute 'ORANGE'
如何使用
wx.lib.colordb.getcolorlist()
中定义的颜色

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

要将一些颜色加载到
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.colordb.updateColourDB()。我不使用它,对我来说,数据库似乎已经被填充了。在我的Ubuntu12.04系统和wxPy 2.8.?上,数据库初始化为630种颜色,而不使用该命令。如果使用wx.lib.colordb.updateColourDB()命令,然后计算颜色,我仍然只能得到630种颜色。如果我打印颜色名称列表,无论是否发出wx.lib.colordb.updateColourDB()命令,列表中的颜色似乎都相同

  • 我也有一个问题,颜色都是白色的,但我试图通过增加for循环中的索引来访问颜色。我正在编写一个制作2D饼图的应用程序,它试图为画布画笔分配颜色,以便用不同的颜色填充饼区。我使用了列表中的前6种颜色(对于6个扇区的饼),发现整个饼都是白色的。最后,我查看了颜色列表(duhh!),发现了问题。。。前7种左右的颜色都是略微不同的白色,彼此非常相似,看起来完全一样

  • 我发现了两种解决“一切都是白色”问题的方法。第一个解决方案涉及使用Python的random.shuffle(序列)对颜色列表进行洗牌

    尝试类似上面的方法,首先按原样添加第一条注释,然后不添加注释。我想你会发现在for循环中打印的列表在这两种情况下都是完全相同的

    在我的应用程序中,我运行了一个循环,在wx.PaintDC上绘制饼图扇区。根据我是否洗牌颜色列表,我可以用两种不同的方法。洗牌会在列表中随机分布白色(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]))
    
    上面的语句选择每10种颜色,这意味着第一个扇区将始终为白色,但其他扇区将为各种其他颜色

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


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

    谢谢,但有些颜色不起作用,例如“PEACHPUFF2”、“LIGHTCORAL”。它们是白色的。有什么问题吗?谢谢你,先生。虽然更新colordb以添加更多颜色似乎很愚蠢。为什么这些颜色不是默认添加的?我想它们只是默认添加了最常见的颜色
        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]))