- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
感谢 SO 上的另一位用户 (Warren Weckesser),我找到了一种格式化 TabularAdapter 列的好方法。我还想完成一些其他自定义,所以我想我应该将其发布给 SO,看看是否可以获得更多帮助。
以下代码以我想要使用的格式放置了几个 TabularAdapter 表。我希望能够做两件事:
我想将第一列设置为不可编辑。我找到了如何将行设置为不可编辑,但不是列 - 这可能吗?
我真正希望的是(甚至比上面的#1更重要)它能够在我的任何列中的值之一发生变化时收到通知!我听说可以使用 numpy 数组进行一些“调整”来完成此任务,但我还没有经验,无法实现这一点。是否有任何 TraitsAdapter mentods 可用于完成此壮举?
这是迄今为止我的代码(感谢 Warren 的修改):
from traits.api import HasTraits, Array, Str
from traitsui.api import View, Item, TabularEditor
from traitsui.tabular_adapter import TabularAdapter
from numpy import dtype
test_dtype = dtype([('Integer#1', 'int'),
('Integer#2', 'int'),
('Float', 'float')])
class TestArrayAdapter1(TabularAdapter):
columns = [('Col1 #', 0), ('Col2', 1), ('Col3', 2)]
even_bg_color = 0xf4f4f4 # very light gray
width = 125
def get_format(self, object, name, row, column):
formats = ['%d', '%d', '%.4f']
return formats[column]
class TestArrayAdapter2(TabularAdapter):
columns = [('Col1 #', 0), ('Col2', 1), ('Col3', 2)]
even_bg_color = 0xf4f4f4 # very light gray
width = 125
object_0_format = Str("%d")
object_1_format = Str("%d")
object_2_format = Str("%.4f")
class Test(HasTraits):
test_array = Array(dtype=test_dtype)
view = \
View(
Item(name='test_array', show_label=False,
editor=TabularEditor(adapter=TestArrayAdapter1())),
Item(name='test_array', show_label=False,
editor=TabularEditor(adapter=TestArrayAdapter2())),
)
test = Test()
test.test_array.resize(5, refcheck=False)
test.configure_traits()
最佳答案
对于您的第 2 项,在与 Enthought 人员交谈后,我确认还没有正式的方法可以做到这一点,但是:
ArrayAdapter
的句柄,将其子类化,并重写 set_text
方法,如下所示:.
class NotifyingArrayAdapter(ArrayAdapter):
value_changed = Event
def set_text(self, object, trait, row, column, text):
super(NotifyingArrayAdapter, self).set_text(object, trait, row,
column, text)
self.value_changed = True
这样,我就可以监听 value_changed
事件,并用它执行我需要的操作。
您可以变得更奇特,使事件成为一个更复杂的对象,例如存储有关旧/新值以及行和列更改的信息:
class ArrayAdapterEvent(HasStrictTraits):
row = Int
column = Int
old = Str
new = Str
class NotifyingArrayAdapter(ArrayAdapter):
value_changed = Event(Instance(ArrayAdapterEvent))
def set_text(self, object, trait, row, column, text):
old = self.get_text(object, trait, row, column)
super(NotifyingArrayAdapter, self).set_text(object, trait, row,
column, text)
event = ArrayAdapterEvent(old=old, new=text, row=row, column=column)
self.value_changed = event
关于enthought - TabularAdapter 自定义/通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29333459/
我正在使用 Enthought Traits/UI 系统,并希望在 Float 特征上强制执行最小值,该特征出现在 GUI 中并且可由用户编辑。 最佳答案 使用 Range特质代替。 Range(lo
我使用的是 openSUSE 12.3 64 位。 Canopy 发布时我成功安装了它,从那以后我通过删除 ~/Enthgout 和 ~/Canopy 来卸载它。 现在我尝试再次安装 Canopy,安
在库中是这样导入的特征: from enthought.traits.api import Int, Float # and the other bad thing: from enthought.t
我最近发现了 Enaml,这是一个来自 Enthought 的 Python GUI 开发包。我非常有兴趣将它与 Enthought Traits 和 Chaco 一起使用,以实现更快速的科学应用开发
我正在使用带有 PanTool 和 ZoomTool 的 chaco 散点图。通过平移和缩放与绘图交互后,我想要一个按钮将绘图重置为默认状态,基本上类似于 matplotlib 主页按钮。我搜索了文档
我正在使用 venv 从 PyPI 安装比根环境中可用的更新版本的 elpy 包。从 pip 查询,我看到 elpy 的以下版本: ~/python/standalone $ pip show elp
使用以下程序: from traits.api import HasTraits, Int, Instance from traitsui.api import View class NewView(
感谢 SO 上的另一位用户 (Warren Weckesser),我找到了一种格式化 TabularAdapter 列的好方法。我还想完成一些其他自定义,所以我想我应该将其发布给 SO,看看是否可以获
我已经在 Windows 7 上安装了 Enthought Canopy Express 1.03,最近更新到版本 1.1.0.1371,还根据帖子 Best way to install OpenC
我一直在尝试运行以下Python代码(来自Enthought的网站)来测试Enthought的Mayavi模块的动画功能。 from mayavi import mlab import numpy n
def print_square(i): print str(i*i) from multiprocessing import Pool p = Pool(1) for i in range(
如果我在 python 或 ipython 中使用箭头键,我不会得到我应该得到的,而是得到一个奇怪的字符组合:一切都像 this 中那样。线程,除了我从未从源代码编译过 python。 发生的事情大致
我正在处理一些代码,这些代码使用 Traits UI 来显示一个对话框,用户可以从中选择两个文件: class Files(HasTraits): filename_1 = File(exis
考虑这个简单的最小示例: from traits.api import Instance, Str, HasTraits class Person(HasTraits): name = Str
我在 Mac OS X PyCharm 上将 Enthought 设置为解释器: ~/Library/Enthought/Canopy_64bit/User 但是,它不显示来自 matplotlib
我使用的是32位Windows 7系统,我刚刚安装了Canopy Enthought Python(1.0.1)但是我无法正确运行它,因为我收到如下消息: “内核(用户 Python 环境)已终止,错
我之前使用 Qt 控制台使用 EPD Python 发行版,其中最有用的功能之一是在同时进行多项计算时轻松地在多个选项卡中拥有多个内核。 我最近得到了“新的”Enthought Canopy,它以某种
我在Canopy里面使用的是matplotlib库,具体函数是xkcd()。此函数使用特定字体来绘制图表。字体为 Comic Sans MS,如果不存在,应下载。 /home/luis/Enthoug
我有一个 HPlotContainer,默认有 2 个空 LinePlots,使用 create_line_plot() 工厂函数创建。然后我执行一些计算并想更新绘图。如何访问 LinePlot 的
我正在尝试使用 Python(2.7)、flask、apache2、mod_wsgi 和 Enthought Canopy 虚拟环境(使用 Canopy 附带的 canopy_cli 命令行界面创建)
我是一名优秀的程序员,十分优秀!