Database 使用Python';s Tkinter,如何保存数据以仅在该应用程序上使用?
我只是想制作一个应用程序,在这个应用程序中,我可以创建角色并将它们保存到应用程序中。我不知道如何保存它而不把它保存到计算机上。在主屏幕上有两个选项,一个用于创建,另一个用于查看配置文件。我不知道如何把它们连接起来。我会把代码放上去,但为了节省空间,这只是其中的一小部分Database 使用Python';s Tkinter,如何保存数据以仅在该应用程序上使用?,database,python-3.x,button,tkinter,save,Database,Python 3.x,Button,Tkinter,Save,我只是想制作一个应用程序,在这个应用程序中,我可以创建角色并将它们保存到应用程序中。我不知道如何保存它而不把它保存到计算机上。在主屏幕上有两个选项,一个用于创建,另一个用于查看配置文件。我不知道如何把它们连接起来。我会把代码放上去,但为了节省空间,这只是其中的一小部分 import tkinter from tkinter import * class Application(Tk): def __init__(self, *args, **kwargs): Tk.__init__
import tkinter
from tkinter import *
class Application(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
self.minsize(width=1300, height=750)
self.maxsize(width=1300, height=750)
container = Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
#there will be another page for profiles
self.frames={}
for F in (Startpage, Createpage):
page_name = F.__name__
frame = F(parent=container, controller=self)
self.frames[page_name] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame("Startpage")
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise()
class Startpage(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
self.controller = controller
self.configure(bg='white')
headLabel = Label(self, text="Character Profiles", font=("Times New Roman", 36), bg='white', height=2)
headLabel.grid(row=0, column=0, columnspan=3, padx=10, pady=25, sticky='n')
createButton = Button(self, text="Create", font=("Times New Roman", 20), bg="black", fg="white", width=30, height=2,
command=lambda: controller.show_frame("Createpage"))
createButton.grid(row=1, column=2, padx=30, pady=2, sticky="sw")
profilesButton = Button(self, text="Profiles", font=("Times New Roman", 20), bg="black", fg="white", width=30, height=2)
profilesButton.grid(row=1, column=0, padx=30, pady=2, sticky="se")
spacer1 = Label(self, bg='white', width=33)
spacer1.grid(row=1, column=1, padx=10, pady=20)
class Createpage(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
self.controller = controller
self.configure(bg='white')
backButton = Button(self, text="back", font=("Times New Roman", 20), bg='black', fg='white',
command=lambda: controller.show_frame("Startpage"))
backButton.grid(row=0, column=0, padx=10, pady=2)
headLabel = Label(self, text="Create a New Character", font=("Times New Roman", 24), bg='white')
headLabel.grid(row=0, column=4, padx=10, pady=2)
img = PhotoImage(file="rsz_profilepic.png")
picLabel = Label(self, image=img, borderwidth=0)
picLabel.image = img
picLabel.grid(row=1, column=0, padx=10, pady=2, columnspan=4)
fullnameLabel = Label(self, bg="white", text="Full Name: ", font=("Times New Roman", 16))
fullnameLabel.grid(row=2, column=0, padx=0, pady=2, sticky="E")
#this would be the file name
fullnameEntry = Entry(self, font=("Times New Roman", 14), bg="#EEEEEE")
fullnameEntry.grid(row=2, column=1, columnspan=3, padx=0, pady=2, sticky="w")
nicknameLabel = Label(self, font=("Times New Roman", 16), text="Alias: ", bg="white")
nicknameLabel.grid(row=3, column=0, padx=0, pady=2)
aliasEntry = Entry(self, font=("Times New Roman", 16), bg="#EEEEEE")
aliasEntry.grid(row=3, column=1, columnspan=3, sticky="W")
sexLabel = Label(self, text="Sex: ", bg="white", font=("Times New Roman", 16))
sexLabel.grid(row=4, column=0, padx=0, pady=2)
v = IntVar()
male = Radiobutton(self, text="Male", bg="white", variable=v, value=1)
female = Radiobutton(self, text="Female", bg="white", variable=v, value=2)
other = Radiobutton(self, text="Other", bg="white", variable=v, value=3)
male.grid(row=4, column=1, sticky="w")
female.grid(row=4, column=2, sticky="w")
other.grid(row=4, column=3, sticky="w")
ageLabel = Label(self, text="Age: ", bg="white", font=("Times New Roman", 14))
ageLabel.grid(row=5, column=0, padx=0, pady=2)
ageEntry = Entry(self, font=("Times New Roman", 14), bg="#EEEEEE")
ageEntry.grid(row=5, column=1, columnspan=3, padx=0, pady=2, sticky="w")
statusLabel = Label(self, text="Status: ", bg="white", font=("Times New Roman", 14))
statusLabel.grid(row=6, column=0, padx=0, pady=2)
s = IntVar()
alive = Radiobutton(self, text="Alive", bg="white", variable=s, value=1)
deceased = Radiobutton(self, text="Deseased", bg="white", variable=s, value=2)
alive.grid(row=6, column=1, sticky="w")
deceased.grid(row=6, column=2, sticky="w")
bigassFrame = Frame(self, bg='white', width=1000, height=1000)
bigassFrame.grid(row=1, column=4, rowspan=50, padx=10, pady=2)
#there are more buttons below these two
generalButton = Button(bigassFrame, text="General", font=("Times New Roman", 14), width=25, fg='white', bg='black')
generalButton.grid(row=0, column=0, padx=10, pady=2)
appearanceButton = Button(bigassFrame, text="Appearance", font=("Times New Roman", 14), width=25, fg='white', bg='black')
appearanceButton.grid(row=1, column=0, padx=10, pady=2)
#here is where the information to be stored is
genFrame = Frame(self, bg='white')
genFrame.grid(row=1, column=6, padx=10, pady=2)
nameLabel = Label(genFrame, text="Name: ", font=("Times New Roman", 14), bg='white')
nameLabel.grid(row=0, column=0, padx=0, pady=2)
nameEntry = Entry(genFrame, font=("Times New Roman", 14), bg="#EEEEEE")
nameEntry.grid(row=0, column=1, padx=0, pady=2)
namemeaningLabel = Label(genFrame, text="Name Meaning: ", font=("Times New Roman", 14), bg='white')
namemeaningLabel.grid(row=1, column=0, padx=0, pady=2)
namemeaningEntry = Entry(genFrame, font=("Times New Roman", 14), bg="#EEEEEE")
namemeaningEntry.grid(row=1, column=1, padx=0, pady=2)
q1Label = Label(genFrame, text="Who named him/her?", font=("Times New Roman", 14), bg='white')
q1Label.grid(row=2, column=0, padx=0, pady=2)
q1Entry = Entry(genFrame, font=("Times New Roman", 14), bg="#EEEEEE")
q1Entry.grid(row=2, column=1, padx=0, pady=2)
#this button will save a copy of the information to the profiles page
saveButton = Button(self, text="Save", font=("Times New Roman", 14))
saveButton.grid(row=0, column=7)
if __name__ == "__main__":
app = Application()
app.title("Character Profiles")
app.geometry("1000x800+20+20")
app.mainloop()
我以前从未在这里发布过问题,所以我不确定我是否做对了。我建议从使用文本文件开始。有一个阅读和编写文本文件的教程。这样做的目的是将所有数据保存为已知格式,以便以后阅读。最常见的方法是让每个实体(在您的例子中是profile)都是文件中的一行,并且实体的每个属性都用逗号分隔。我不知道您存储的是哪种配置文件,但这里有一个通用示例: 要创建配置文件,请将其添加到
profiles.txt
文件的末尾
first_name = 'john'
last_name = 'doe'
favorite_language = 'python'
file = open('profiles.txt', 'a') # 'a' for append. Don't overwrite old content
file.write(first_name + ',' + last_name + ',' + favorite_language)
file.close()
然后,要读取所有配置文件:
file = open('profiles.txt', 'r')
lines = file.read_lines()
for line in lines:
info = line.split(',')
first_name = info[0]
last_name = info[1]
fav_language = info[2]
# do something with this info
file.close()
您还可以将配置文件存储在对象中,例如:
class Profile():
def __init__(self, first_name, last_name, fav_language):
self.first_name = first_name
self.last_name = last_name
self.fav_language = fav_language
def save(self):
file = open('profiles.txt', 'a')
file.write(first_name + ',' + last_name + ',' + favorite_language)
file.close()
当然,这种方法远远不够完美。例如,如果用户在名称中输入逗号,会发生什么情况?现在,split
返回的信息不正确,或者您得到了一个错误。如果你想让它变得真正健壮,你必须做各种各样的字符串处理,使它至少很难被打破,或者你不能允许用户在他们的名字中使用逗号
最后一点,人们通常在“现实世界”中解决问题的方法是使用数据库。如果您感兴趣,可以研究MySQL、Postgresql或MongoDB之类的东西。它们比编写文本文件复杂得多,但工作得更好。它们本质上是计算机上独立的程序,专门用于为您保存和检索数据。以后尽量减少代码。这是一个需要仔细研究的问题,特别是当它与你的问题并不完全相关时。我看到了更糟糕的第一个问题。你是在问如何在关闭和打开应用程序之间用python保存数据吗?@jcolemang是的。当您关闭它时,当您重新打开它时,信息仍将在那里