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)
我在把值转换成布尔类型时,做得对吗?
补充:这是我如何读写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)
1 个回答
2
正如我在评论中提到的,不要用 bool(config.StartValues['Checkbox2'])
来进行数据转换。bool
这个东西会把任何不等于 0
、0.0
或空的序列和映射的东西都当作 True
。所以在这种情况下,像 "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)