Помогите с cPickle в Python 2.6 - PullRequest
4 голосов
/ 03 июля 2010

Я попробовал следующий код я 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

Что я делаю не так?

EDIT:

Я попробовал следующий код, и он работает! Теперь, как мне сделать так, чтобы при перезапуске программы весы находились в том же положении, в котором они находились при последнем закрытии программы?

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 ]

2 голосов
/ 03 июля 2010

Попробуйте изменить порядок аргументов:

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

В соответствии с документацией , файл должен быть вторым аргументом, а объект, который нужно выбрать, должен быть первым.

1 голос
/ 03 июля 2010

Я думаю, у вас есть параметры в неправильном порядке.Смотри документы здесь .Попробуйте ниже:

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