在特征GUI中绘制实心框的颜色

时间:2013-10-22 06:10:33

标签: python user-interface colors traits traitsui

我想知道如何为我的python traits GUI创建一个可靠的颜色框,我可以通过点击不同的按钮更改颜色。

我找到了ColorEditor编辑器,所以我可以通过定义一个特性来获得可靠的颜色框:

 my_color_box = Color()

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

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

但是,该框还包含带有颜色名称的文本,这不是我想要的外观。我已经尝试了ColorEditor()的其他风格,似乎没有一个给我一个坚实的颜色框。

有谁知道我能做到这一点吗?

谢谢,

1 个答案:

答案 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()