2010-06-27 43 views
0

我寫了下面的美麗python示例代碼。現在我該如何做到這一點,所以當我退出然後重新啓動程序時,它會記住秤的最後一個位置?如何讓Python記住設置?

import Tkinter 

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') 
root.mainloop() 

編輯:

我嘗試下面的代碼

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 

回答

4

的刻度值寫入一個文件,並在閱讀在啓動。這裏有一個辦法做到這一點(大約),

CONFIG_FILE = '/path/to/config/file' 

root.sclX = ... 

try: 
    with open(CONFIG_FILE, 'r') as f: 
     root.sclX.set(int(f.read())) 
except IOError: # this is what happens if the file doesn't exist 
    pass 

... 
root.mainloop() 

# this needs to run when your program exits 
with open(CONFIG_FILE, 'w') as f: 
    f.write(str(root.sclX.get())) 

顯然,你可以使它更強大的/複雜的/如果複雜,比如,要保存和恢復附加值。

+0

我想這樣,但出現以下錯誤: 回溯(最近通話最後一個): 文件「」,線路244,在run_nodebug 文件「C:\ Python26 \ pickleexample.py」,行30,在 與開放(CONFIG_FILE,'w')作爲f: IOError:[Errno 2]沒有這樣的文件或目錄:'庫\\ Documents \\ T.txt' 如何正確設置文件目錄? – rectangletangle 2010-06-27 23:50:22

+0

這可能意味着您嘗試創建的文件的父目錄之一不存在。確保你在'CONFIG_FILE'中指定的文件的父目錄存在。例如,如果你設置了'CONFIG_FILE ='Libraries \ Documents \ T.txt'',確保目錄'Libraries \ Documents'(相對於你運行Python腳本的目錄)存在。儘管我實際上推薦使用絕對路徑(一個以驅動器號開頭的路徑),例如'CONFIG_FILE ='C:\ SomeFolder \ Libraries \ Documents \ T.txt''。這種方式不那麼令人困惑。 – 2010-06-28 00:14:43

1

您可以告訴程序編寫一個名爲例如「save.txt的」文件與參數,然後在進一步執行加載:

是否有任何「save.txt的」?

否:用參數寫一個新的保存文件。 是:讀取參數並將其傳遞給變量。

如果參數已更新,則將其重寫到文件中。

我不是專家的Python,但應該有一些好的庫mainloop之前只是爲了讀取和寫入文件:)

3

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

,並在隨後的運行中(當.pk文件已存在),相應的cPickle.load調用將其恢復並將其設置爲...config(**k)(不幸的是,還需要一些技巧來確認cPickle醃製配置可以安全地重新加載)。

0

在解釋一個簡單的使用

help(cPickle.dump) 

會立即顯示,你應該嘗試通過交換f和存儲在呼叫對象改變Alex的代碼:

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

對於客體的持久性有在Python中是一個很好的模塊:擱置。

例如(這兩個腳本是在同一目錄中)

腳本1

import shelve 

settings = shelve.open('mySettings') 
settings['vroot_directory'] = commands.getoutput("pwd") 

腳本2個

import shelve 

settings = shelve.open('mySettings') 
root_directory_script1 = settings['vroot_directory']) 

RGDS,

PS。一個更完整的例子我的帖子由GDDC答案: Importing python variables of a program after its execution