gpt4 book ai didi

python - 需要帮助让程序记住设置,cPickle

转载 作者:行者123 更新时间:2023-12-01 06:16:20 24 4
gpt4 key购买 nike

如何让此代码在重新打开时记住秤的最后位置?

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()

最佳答案

您需要进行许多更改和修复才能使代码按预期工作:

import Tkinter
import cPickle

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

try:
with open('myconfig.pk', 'rb') as f:
place = cPickle.load(f)
except IOError:
pass
else:
root.place.set(place)

def tracer(*a):
global place
place = root.place.get()
root.place.trace('r', tracer)

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

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

让我们从顶部看一下变化。我引入了一个 Tkinter 变量 root.place,以便可以在全局变量 place 中随时跟踪刻度的位置(通过后面的函数 tracer) (使用 OOP 并避免使用全局变量会更优雅,但我试图让事情变得简单;-)。

然后,当 .pk 文件可读时,try/except/else 语句会更改 place 的设置。您从未试图读回您保存的内容。

最后但并非最不重要的一点是,我将保存操作移至主循环退出后,并简化了它(您不需要所有的配置字典 - 无论如何您都无法访问它们 - 只需要地点全局)。您在主循环启动之前保存,因此“保存”初始值(不是由主循环执行更改的值)。

tracer 函数和 .trace 方法调用确保全局变量 place 始终记录秤的最新位置 - 以便可以在主循环退出后恢复并保存(主循环退出后,所有 Tkinter 对象,包括 GUI 对象和变量,都变得不可访问)。

关于python - 需要帮助让程序记住设置,cPickle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3173897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com