

pythonでtkinterを使って、入力したデータもしくは参照したデータを保存したいです。  
ネットで調べると主にsqlを使って保存する方法ありますが、他に方法ありますでしょうか。

**実現したい内容**  
下記のスクリプトで画像をクリックしています。

①画像取得＞保存  
②フォルダーで保存した画像を選択  
③画像クリック

**tkinterを閉じた後に再度開くと選択したフォルダーのデータが消えてしまいます。**  
そのために  
tkinter上でファイルを新規保存する機能もしくは他に保存する方法ありますでしょうか。

②フォルダーで保存した画像を選択  
**tkinterを再度開いた後に選択したフォルダを表示できますか。  
最終的に選択したフォルダーを保存したいです。**

お知恵をお貸しいただけませんでしょうか。

どなたかご教授頂ければ幸いです。  
何卒よろしくお願い致します。

コード

[code]

    import tkinter as tk
    from PIL import Image, ImageTk
    import pyautogui
    import time
    import subprocess
    import os
    from tkinter import filedialog
    import re
    
    #SnippingTool起動、ボタンがクリックされたら実行
    def image(event):
        
     p = subprocess.Popen([r"C:\Windows\System32\SnippingTool.exe"])
    
    selected_file = ""
    #ファイル参照、ボタンがクリックされたら実行
    def file_select():
      global selected_file
      idir = 'C:\\python_test' #初期フォルダ
      filetype = [("すべて","*"),("テキスト","*.txt"), ("音楽","*.mp3")] #拡張子の選択
      file_path = tk.filedialog.askopenfilename(filetypes = filetype, initialdir = idir)
      selected_file = file_path
      input_box.insert(tk.END, file_path) #結果を表示
      print(selected_file)
    
    #画像クリック、ボタンがクリックされたら実行
    def click_image():
     global selected_file
    
     #ファイル参照の関数からselected_fileを代入、このPCアイコンの座標を取得
     position=pyautogui.locateOnScreen(selected_file, confidence=0.9)
     #position=pyautogui.locateOnScreen("C://Users///image//excel.PNG", confidence=0.9)
     #maxwindowPCアイコンをクリック
     pyautogui.doubleClick(position)
     
    # 画面作成
    window = tk.Tk()
    window.geometry("300x300")
    window.title("ボタンを表示する")
    
    #画像取得 ボタン作成
    btn1 = tk.Button(window, text="①画像取得")
     
    # ボタン表示
    btn1.place(x=15, y=15, width=150, height=40)
    
    # ボタンに関数をbind
    btn1.bind("<Button-1>", image)
    
    #入力欄の作成
    input_box = tk.Entry(width=40)
    input_box.place(x=10, y=100)
    
    #結果ラベルの作成
    input_label = tk.Label(text="②画像ファイル選択")
    input_label.place(x=10, y=70)
    
    #参照ボタンの作成
    button = tk.Button(text="参照",command=file_select)
    button.place(x=10, y=130)
    
    #画像クリックボタンの作成
    button = tk.Button(text="③画像クリック",command=click_image)
    button.place(x=15, y=175, width=150, height=40)
     
    # 画面表示（常駐）
    window.mainloop()
    
    
[/code]


CC BY-SA 4.0
2022-10-11T10:07:30.273
91548
2022-10-12T14:33:40.737
2022-10-11T14:50:04.277
18859
18859
question
python python3 tkinter
tkinterで入力したデータを保存する方法


必要なデータが1つだけなら起動時に読みだして、データが更新される毎にファイルも更新するのが簡単なやり方ですね。

該当部分だけ抜き出して記述すると以下になります。前後は省略します。

[code]

    #### 選択ファイルパスを保存したファイル(名前やフォルダは適当に変更すること)からデータ取得
    savedata_file = os.path.dirname(os.path.abspath(__file__)) + '\\savedata.txt'
    try:
        with open(savedata_file, 'r', encoding='utf8') as f:
            selected_file = f.read()
    except:
        selected_file = "C:\\python_test\\*.*" # ファイルが無い等の時は初期フォルダ+ダミーファイル名
    
    # ファイル参照、ボタンがクリックされたら実行
    def file_select():
        global selected_file
        idir = os.path.dirname(os.path.abspath(selected_file)) #### 対象フォルダを抽出
        filetype = [("すべて", "*"), ("テキスト", "*.txt"), ("音楽", "*.mp3")]  # 拡張子の選択
        file_path = tk.filedialog.askopenfilename(filetypes=filetype, initialdir=idir)
        selected_file = file_path
        input_box.insert(tk.END, file_path)  # 結果を表示
        print(selected_file)
        #### 選択結果パスが有効ならファイルへ保存
        if os.path.exists(selected_file):
            with open(savedata_file, 'w', encoding='utf8') as f:
                f.write(selected_file)
    
[/code]

* * *

以下、例は示しませんが他の方法も参考に：

もう少しデータを増やして階層化する等の場合はこんなパッケージが使えるでしょう。  
[configparser ---
設定ファイルのパーサー](https://docs.python.org/ja/3/library/configparser.html)  
[pythonプログラムにおける設定ファイル管理モジュール～configparserの使い方と注意点～](https://qiita.com/mimitaro/items/3506a444f325c6f980b2)  
[How to update a value python .ini file with
configparser](https://stackoverflow.com/q/67163117/9014308)

他にも settings とか json とかあるようです。  
[Pythonの設定ファイル管理まとめ(settings / ini / json 形式別)
[コピペサンプルコード付き]](https://kodocode.net/python-begin-settings/)  
[【Python基礎】プログラムの設定ファイルとしてJSON形式のファイルを検討](https://3pysci.com/json-1/)  
[自作ツールどうしてる？Python設定ファイル選手権](https://news.mynavi.jp/techplus/article/zeropython-63/)


CC BY-SA 4.0
2022-10-12T14:33:40.737
91568
2022-10-12T14:33:40.737
26370
91548
answer