Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 使用Python';s Tkinter,如何保存数据以仅在该应用程序上使用?_Database_Python 3.x_Button_Tkinter_Save - Fatal编程技术网

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是的。当您关闭它时,当您重新打开它时,信息仍将在那里