我有很多小部件一樣複選框,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)
哪些數據存儲在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