2016-09-29 7 views
-1

私は、文字を作成してアプリケーションにのみ保存できるアプリケーションを作成しようとしています。私はそれをコンピュータ自体にやらないで保存する方法がわかりません。メイン画面には、作成するプロファイルとプロファイルを表示する2つのオプションがあります。私はそれらを接続する方法を知らない。コードを入れておきますが、それはスペースを節約するためのほんの一部です。PythonのTkinterを使用して、そのアプリケーションでのみ使用するデータを保存するにはどうすればよいですか?

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

これまでに質問を投稿したことはありません。私は正しいかどうかは分かりません。

+0

今後は少ないコードを含めるようにしてください。それはあなたの質問にすべて関連しているわけではありませんが特に、見ることが多いです。私はずっと悪い最初の質問を見た。 – jcolemang

+0

あなたは、アプリケーションを閉じるときと開いたときの間に、Pythonでデータを保存する方法を尋ねていますか? – jcolemang

+0

@jcolemangええ。あなたがそれを閉じると、あなたはそれを開いたときに情報がそこに残るでしょう – DamnFreckles

答えて

0

私が最初にお勧めする方法は、テキストファイルを使用することです。テキストファイルの読み書き用チュートリアルhereがあります。アイデアは、あなたが後で読むことができる既知のフォーマットですべてのデータを保存することです。これを行う最も一般的な方法は、すべてのエンティティ(あなたのケースのプロファイル)をファイル内の行にし、エンティティの各プロパティをコンマで区切ることです。私はあなたが保存されているプロファイルの正確どのような種類を知っているが、ここでは一般的な例ではありません。

読み取るために、そして、あなたの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() 

の末尾に追加し、プロファイルを作成するにはすべてのプロファイル:

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

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

また、このような何か多分、オブジェクト内のプロファイルを保存することができ

もちろん、この方法は完璧からまでです。たとえば、ユーザーが名前にカンマを入力するとどうなりますか?今すぐsplitが間違った情報を返すか、エラーが発生しています。これを本当に堅牢にしたい場合は、少なくとも文字列を処理して中断しないようにするか、ユーザーが名前にカンマを使用することを許可しないようにする必要があります。

最後に、「現実の世界」で問題を解決する方法は、データベースを使用することです。興味があれば、MySQL、Postgresql、MongoDBなどを調べてください。テキストファイルを書くよりははるかに複雑ですが、はるかにうまく動作します。これらは、本質的にコンピュータ上の独立したプログラムで、データの保存と取得専用です。

関連する問題