0

我想知道如何为我的 python 特征 GUI 创建一个纯色框,我可以通过单击不同的按钮来更改颜色。

我找到了 ColorEditor 编辑器,因此我可以通过定义特征来实现实心颜色框:

 my_color_box = Color()

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

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

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

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

谢谢,

4

1 回答 1

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

编辑2:

正如您所要求的,这是一个使用 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()
于 2013-10-22T16:58:41.523 回答