的wxPython:启用和禁用动态小工具,从CSV文件
我有很多小部件一样复选框,textctrls,statictexts,一个小程序,让设置...的wxPython:启用和禁用动态小工具,从CSV文件
我的所有控件的值存储在一个字典。我正在保存设置,例如这个词典在一个csv文件中。当我从这个文件导入设置并更新我的字典时,应根据字典中的值通过调用“def enable_controls”来启用或禁用所有的窗口小部件。但是小部件始终处于启用状态,即使该值为“False”。
这里是代码片段:
def enable_controls(self):
self.Checkbox1.SetValue(bool(config.StartValues['Checkbox1']))
self.Checkbox1TextCtrl.Enable(bool(config.StartValues['Checkbox1']))
self.Checkbox1StaticText.Enable(bool(config.StartValues['Checkbox1']))
self.Checkbox2.SetValue(bool(config.StartValues['Checkbox2']))
self.Checkbox2TextCtrl.Enable(bool(config.StartValues['Checkbox2']))
self.Checkbox2StaticText.Enable(bool(config.StartValues['Checkbox2']))
当我不动态分配的价值,它的工作原理:
def enable_controls(self):
self.Checkbox1.SetValue(False)
self.Checkbox1TextCtrl.Enable(False)
self.Checkbox1StaticText.Enable(False)
self.Checkbox2.SetValue(False)
self.Checkbox2TextCtrl.Enable(False)
self.Checkbox2StaticText.Enable(False)
我做类型转换到正确bool的?
编辑:这是我怎么写的和我的csv文件阅读:
def onButtonSave(self, event):
import csv
getValues(self, StartValues)
writer = csv.writer(open('Test.csv', 'wb'))
for key, value in sorted(config.StartValues.items()):
writer.writerow([key, value])
def onButtonLoad(self, event):
import csv
reader = csv.reader(open('Test.csv', 'rb'))
config.StartValues = dict(x for x in reader)
enable_controls(self)
正如我在评论中说,不要使用bool(config.StartValues['Checkbox2'])
做数据转换。 bool
返回True
对于任何事情不是评估为0
,0.0
或空序列或映射。在这种情况下,像"True"
和"False"
字符串都将计算为True
使用字符串比较或类似的效果会更好,但用户推出错别字的提防,如果你让他们编辑的文件!
编辑:使用例如...
def evalBooleans(value):
"""Assumes we're getting either booleans or strings!"""
return (value if isinstance(value, bool)
else value.lower() == "true")
cb2 = evalBooleans(config.StartValues['Checkbox2'])
self.Checkbox2.SetValue(cb2)
self.Checkbox2TextCtrl.Enable(cb2)
self.Checkbox2StaticText.Enable(cb2)
谢谢你的回答,里卡多!这就是我猜测的结果,所有的值都被评估为“真”。但我真的不知道如何在代码 – user1106770 2012-01-01 20:34:12
中使用'cb2 =“true”== config.StartValues ['Checkbox2']。lower()'部分编辑以包含示例。 'cb2'部分只是为了减少你转换数值的次数! :D – 2012-01-01 20:56:49
您也可以在读取它们时转换这些值,然后在代码中的其他任何地方正常使用它们。 – 2012-01-01 20:57:29
哪些数据存储在StartValues词典。以什么方式? – jknupp 2012-01-01 19:01:27
如果它们全部启用,它看起来好像不是通过布尔值,而是其他类型。我觉得这个与我回答的前一个问题有关。在这种情况下,如果您直接从CSV文件获取值,则很可能它们是字符串,而任何非空字符串的计算结果都是“真”。请注意,这意味着'bool(“False”)'是'True'!你可能会更喜欢'cb2 =“true”== config.StartValues ['Checkbox2']。lower()'。 'lower'在那里可以捕捉单词的所有可能的大写字母,但是要小心错别字... – 2012-01-01 19:02:22
如果您不需要专门用于人类可读的csv格式,那么使用cPickle会更有效,因为它会保留所有对象类型。您将避免必须将字符串值转换回来。 – jdi 2012-01-01 19:13:58