在Python 2.6中帮助cPickle

时间:2010-07-02 20:22:28

标签: python tkinter python-2.6 pickle

我尝试了以下代码我python。这是我第一次尝试酸洗。

import Tkinter
import cPickle


root = Tkinter.Tk()

root.sclX = Tkinter.Scale(root, from_=0, to=1500, orient='horizontal', resolution=1)
root.sclX.pack(ipadx=75)



root.resizable(False,False)
root.title('Scale')


with open('myconfig.pk', 'wb') as f:
    cPickle.dump(f, root.config(), -1)
    cPickle.dump(f, root.sclX.config(), -1)
root.mainloop()

但是得到以下错误:

Traceback (most recent call last):
  File "<string>", line 244, in run_nodebug
  File "C:\Python26\pickleexample.py", line 17, in <module>
    cPickle.dump(f, root.config(), -1)
TypeError: argument must have 'write' attribute

我做错了什么?

修改

我尝试了以下代码,它有效!现在,如何在重新启动程序时将其设置为与程序上次关闭时的位置相同?

import Tkinter
import cPickle


root = Tkinter.Tk()

root.sclX = Tkinter.Scale(root, from_=0, to=1500, orient='horizontal', resolution=1)
root.sclX.pack(ipadx=75)



root.resizable(False,False)
root.title('Scale')


with open('myconfig.pk', 'wb') as f:
    cPickle.dump(root.config(), f, -1);
    cPickle.dump(root.sclX.config(), f, -1);
root.mainloop()

2 个答案:

答案 0 :(得分:2)

尝试切换参数的顺序:

cPickle.dump(root.config(), f, -1)
cPickle.dump(root.sclX.config(), f, -1)

根据the documentation,文件应该是第二个参数,并且要被pickle的对象应该是第一个。

答案 1 :(得分:1)

我认为您的参数顺序错误。请参阅文档here。请尝试以下:

cPickle.dump(root.config(), f, -1);
cPickle.dump(root.sclX.config(), f, -1);