首先让我说全新的在这里和全新的编码
我试图完成的整个想法是有一个参数列表,用户可以保存这些参数,以后使用时不必更改代码
我有一个更大的程序,我的工作,但我已经简化了这段代码,以弄清楚这一点。我有下面的代码,将获得和接收一个单一的输入框,如果我试图添加第二个输入框到“保存”,然后它只是添加到第一个输入框像连接。
import tkinter
from tkinter import *
from tkinter import filedialog
from tkinter import ttk
import sqlite3
import pickle
#---------------------------------------------------------------
#---------------------------------------------------------------
root = Tk()
root.title("Cabinet Cut List Calculator")
frame = LabelFrame(root)
frame.pack()
#---------------------------------------------------------------
#---------------------------------------------------------------
toek = DoubleVar(value=3.5)
default_hgt = IntVar(value=42)
parms_list = [toek, default_hgt]
#---------------------------------------------------------------
#---------------------------------------------------------------
def SaveParms():
parms_name = filedialog.asksaveasfilename(initialdir="/Users/Owner/Desktop/Python/cab databases/Parameters", title="Save Parameters", filetypes=(("Dat Files", "*.dat"),("All Files", "*.*")))
if parms_name:
if parms_name.endswith(".dat"):
pass
else:
parms_name = f"{parms_name}.dat"
parms_list = y.get()
output_parms = open(parms_name, 'wb')
pickle.dump(parms_list, output_parms)
def LoadParms():
parms_name = filedialog.askopenfilename(initialdir="/Users/Owner/Desktop/Python/cab databases/Parameters", title="Load Parameters", filetypes=(("Dat Files", "*.dat"),("All Files", "*.*")))
if parms_name:
y.delete(0, END)
input_parm = open(parms_name, "rb")
load_item = pickle.load(input_parm)
for i in load_item:
y.insert(END, i)
def DelParms():
y.delete(0,END)
#---------------------------------------------------------------
#---------------------------------------------------------------
the_menu = Menu(root)
root.config(menu = the_menu)
#^^^^^^^^^^
file_menu = Menu(the_menu, tearoff=False)
the_menu.add_cascade(label="File", menu= file_menu)
#^^^^^^^^^^
file_menu.add_command(label="Save Parameters", command= SaveParms)
file_menu.add_command(label="Load Parameters", command= LoadParms)
file_menu.add_separator()
file_menu.add_command(label="Clear Parameters", command= DelParms)
#---------------------------------------------------------------
#---------------------------------------------------------------
y = Entry(frame, textvariable=toek)
y.pack(side=RIGHT)
yl= Label(frame, text = "1....")
yl.pack()
frame2 = LabelFrame(root)
frame2.pack()
x = Entry(frame2, textvariable= default_hgt)
x.pack(side=RIGHT)
xl= Label(frame2, text = "2....")
xl.pack()
#---------------------------------------------------------------
root.mainloop()
我知道这会涉及到一些for循环,但我想不出来。如果我尝试
for i in parms_list:
parms_list =+ i.get()
在我得到的保存功能中
parms_list =+ i.get()
^^^^^
AttributeError: 'str' object has no attribute 'get'
PICKLE超出了我有限的知识范围。
我知道这里有一个简单的解决办法,我试过其他的方法但我不知所措。
谢谢祝你今天愉快
编辑:我已经为此工作了几天,这是我为“保存”功能提出的
if parms_name:
if parms_name.endswith(".dat"):
pass
else:
parms_name = f"{parms_name}.dat"
new_list = []
for i in entry_list:
entry_name = [key for key, value in globals().items() if value == i]
new_list += [(entry_name[0] + ".get()")]
# print(new_list)
# new_list = [y.get(), x.get()]
output_parms = open(parms_name, 'wb')
pickle.dump(new_list, output_parms)
所以我越来越接近,但“new_list”只是字符串,我需要它来运行变量的.get()函数,我会继续工作,但如果有任何帮助,我会很感激它,谢谢。
1条答案
按热度按时间sqyvllje1#
因此,就像生活中的大多数事情一样,做事情的方法不止一种。我使用.dat文件是因为我在教程中使用了它。在我一头撞到墙上并在其间做了研究之后,我最终使用了.ini(配置文件),以下是我的工作代码。