2013-10-22 29 views
0

我想知道如何为我的python traits GUI创建一个坚实的盒子,我可以通过点击不同的按钮来改变颜色。在特征中绘制颜色的固体盒子GUI

我已经找到了ColorEditor编辑器,这样我就可以通过定义特征实现纯色盒:

my_color_box = Color() 

,然后在我的特质视图定义:

Item('my_color_box', editor=ColorEditor(),style='readonly'), 

然而,框中还包含带有颜色名称的文本,这不是我想要的样子。我试过了ColorEditor的其他样式(),并没有看到给我一个坚实的颜色框。

有谁知道我该如何做到这一点?

感谢,

回答

1

这本身并不在traitsui编辑器,据我所看到的处理。最简单的事情(取决于你想要做什么)是只使用所需颜色的实体图像(使用ImageEditor)。即使您有几种不同的颜色可供选择,但ImageEnumEditor(只读样式)也可以捕捉它们。

为了捕捉能够捕捉任何颜色的特征的表现力(没有列举我不推荐的256^3种颜色的列表),您需要做更多的工作。也许你可以定义一个自定义编辑器来深入研究工具箱代码,而不需要太多的工作。我打算尝试使用wxpython提供一个最简单的工作示例,但是我没有发现一个超级明显的小部件在wxpython中执行此操作,而我的wxpython技能相当勉强。

编辑:

我找到了一种方法来生成与它一年前彩色框的表。对不起,我没有想到它,如果你实际上并不想要一个表映射到颜色(这是我想要的),那么我觉得你很简单,所以我敢打赌你可以使用traitsui而不是wx内部构造。但是,在任何地方,这里的东西,在试图给你工具来帮助解决你自己的问题的精神:

from traits.api import * 
from traitsui.api import * 

class ColorColumn(ObjectColumn): 
    def get_cell_color(self,object): 
    return object.color 

class ColorContainer(HasTraits): 
    color=Color('red') 
    blank_text=Str('') 

class SomeApplication(HasTraits): 
    dummy_table=List(ColorContainer) 

    def _dummy_table_default(self): 
    return [ColorContainer()] 

    traits_view=View(Item(name='dummy_table', 
    editor=TableEditor(columns= 
     [ColorColumn(label='',editor=TextEditor(),name='blank_text',editable=False)], 
     selection_bg_color=None,),show_label=False)) 

SomeApplication().configure_traits() 

EDIT2:

按照您的要求为,这是一个使用ImageEnumEditor最小工作示例或ImageEditor。在这个例子中,图像位于/ path_to_the_python_file/images。请注意,ImageEnumEditor仅适用于.gif文件。

$ ls images 
green.gif red.gif yellow.gif 

from traits.api import * 
from traitsui.api import * 
from pyface.image_resource import ImageResource 

class ImageEnumStyle(HasTraits): 
    ci=Enum('yellow','green','red','yellow') 

    traits_view=View(Item('ci',editor=ImageEnumEditor(path='images',),style='readonly')) 

class ImageStyle(HasTraits): 
    ci=Instance(ImageResource) 

    #to modify the image, modify the ImageResource `name` attribute 
    def _ci_default(self): 
    return ImageResource('yellow.gif') 

    traits_view=View(Item('ci',editor=ImageEditor())) 

ImageWhicheverStyleYouPrefer().configure_traits() 
+0

另一种可能性可能是使用enable来开发一个只显示纯色的“组件” - 我不确定这是多么简单。 – aestrivex

+0

感谢您的建议。使用图像可以,但是我找不到动态调整图像大小的方法,这有点烦人。 – RobMSN

+0

您能否提供ImageEnumEditor如何实现这一目标的最低工作示例?非常感谢! – RobMSN