我想知道如何为我的python traits GUI创建一个可靠的颜色框,我可以通过点击不同的按钮更改颜色。
我找到了ColorEditor编辑器,所以我可以通过定义一个特性来获得可靠的颜色框:
my_color_box = Color()
然后在我的特质视图定义中:
Item('my_color_box', editor=ColorEditor(),style='readonly'),
但是,该框还包含带有颜色名称的文本,这不是我想要的外观。我已经尝试了ColorEditor()的其他风格,似乎没有一个给我一个坚实的颜色框。
有谁知道我能做到这一点吗?
谢谢,
答案 0 :(得分: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()