1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

python/TKのひな形をChatGPTと対話しながら作る

Posted at

ruby/TKは触ったことありますが、
python/TKは触ったことなかったので
個人的にはQtよりTkのほうが好きです

いざ作ろうと思うと調べるのがめんどくさくなったのでざっくりChatGPTに作ってもらうことにしました。
私の曖昧でへたくそな日本語でもそれなりのものを返してくるChatGPTまじすごい

image.png

ChatGPT質問.
(1)
下記ようなGUIをpython/Tkで作成してください
ボタンを押すと
[テキストボックス1]
[テキストエリア2]
の内容を[テキストボックス3]のファイル名で保存

GUIレイアウトイメージ
value1=[テキストボックス1]
value2=[テキストエリア2]
output=[テキストボックス3][ボタン(save)]
(2)
保存するフォーマットは、pythonで読める形式でお願いします
(3)
保存したjson読み込んでGUIに表示する機能も追加してください。input:[テキストボックス][ボタン read] を追加
(4)
レイアウト作成部分はclass 読み込み、書き込みの関数はメソッドにしてください
(5)
output input のテキストボックスの横に[参照ボタン]を追加してファイルダイアログが開くようにして、そこからoutput,inputのファイルを指定できるようにしてください
(6)
value3としてプルダウン形式を追加してください、選択できる値は[ "--","AA","BB","CC"]です
(7)
input,outpuそれぞれのlabelとテキストボックスと参照ボタンと保存読み込みボタンは Frameでまとめてください
(8)
Save、Readボタンが2行目になっていますが、1行でまとめてよいです。またvalue1,value2,value3もそれぞれのテキストボックス、テキストエリア、プルダウンとFrameでまとめてください
(9)
output:のテキストボックス参照ボタンを無くして、saveボタンからダイアログを開いてダイアログからjsonを保存できますか
(10)
output:のLabel、テキストボックスが不要になったので削除してくだい、
inputfileのLabel、テキストボックス、参照も削除して、Readボタンから直接保存できるようにしてください
(11)
各frameを左寄せにしてください
テキストボックスやテキストボックスの大きさをWindowの幅に簡単に合わせられるならお願いします
テキストエリアにスクロールバーを追加してください
pytkGUIsample.py
import tkinter as tk
from tkinter import messagebox, filedialog, Scrollbar
import json

class TextSaverApp:
    def __init__(self, master):
        self.master = master
        master.title("テキスト保存 GUI")

        # value1用のフレーム
        value1_frame = tk.Frame(master)
        value1_frame.grid(row=0, padx=10, pady=10, sticky="w")

        tk.Label(value1_frame, text="value1:").grid(row=0, column=0, padx=5, pady=5, sticky="e")
        self.entry1 = tk.Entry(value1_frame, width=50)
        self.entry1.grid(row=0, column=1, padx=5, pady=5)

        # value2用のフレーム
        value2_frame = tk.Frame(master)
        value2_frame.grid(row=1, padx=10, pady=10, sticky="w")

        tk.Label(value2_frame, text="value2:").grid(row=0, column=0, padx=5, pady=5, sticky="ne")
        
        # テキストエリアとスクロールバーを追加
        self.text_area = tk.Text(value2_frame, height=5, width=50)
        self.text_area.grid(row=0, column=1, padx=5, pady=5)
        
        scrollbar = Scrollbar(value2_frame, command=self.text_area.yview)
        scrollbar.grid(row=0, column=2, sticky="ns")
        self.text_area['yscrollcommand'] = scrollbar.set

        # value3用のフレーム
        value3_frame = tk.Frame(master)
        value3_frame.grid(row=2, padx=10, pady=10, sticky="w")

        tk.Label(value3_frame, text="value3:").grid(row=0, column=0, padx=5, pady=5, sticky="e")
        self.value3_var = tk.StringVar(master)
        self.value3_var.set("--")  # デフォルト値
        self.value3_menu = tk.OptionMenu(value3_frame, self.value3_var, "--", "AA", "BB", "CC")
        self.value3_menu.grid(row=0, column=1, padx=5, pady=5, sticky="w")

        # SaveとReadボタンを同じ行に配置
        button_frame = tk.Frame(master)
        button_frame.grid(row=3, columnspan=2, padx=10, pady=10, sticky="w")

        save_button = tk.Button(button_frame, text="Save", command=self.save_to_file)
        save_button.grid(row=0, column=0, padx=5, pady=5)

        read_button = tk.Button(button_frame, text="Read", command=self.read_from_file)
        read_button.grid(row=0, column=1, padx=5, pady=5)

    def save_to_file(self):
        value1 = self.entry1.get()
        value2 = self.text_area.get("1.0", tk.END).strip()
        value3 = self.value3_var.get()
        
        filename = filedialog.asksaveasfilename(defaultextension=".json", filetypes=[("JSON files", "*.json"), ("All files", "*.*")])
        if not filename:
            return
        
        data = {
            "value1": value1,
            "value2": value2,
            "value3": value3
        }
        
        try:
            with open(filename, 'w', encoding='utf-8') as file:
                json.dump(data, file, ensure_ascii=False, indent=4)
            messagebox.showinfo("Success", f"{filename} に保存しました。")
        except Exception as e:
            messagebox.showerror("Error", f"ファイル保存中にエラーが発生しました:\n{e}")

    def read_from_file(self):
        filename = filedialog.askopenfilename(filetypes=[("JSON files", "*.json"), ("All files", "*.*")])
        if not filename:
            return
        
        try:
            with open(filename, 'r', encoding='utf-8') as file:
                data = json.load(file)
                self.entry1.delete(0, tk.END)
                self.entry1.insert(0, data.get("value1", ""))
                self.text_area.delete("1.0", tk.END)
                self.text_area.insert("1.0", data.get("value2", ""))
                self.value3_var.set(data.get("value3", "--"))
            messagebox.showinfo("Success", f"{filename} を読み込みました。")
        except Exception as e:
            messagebox.showerror("Error", f"ファイル読み込み中にエラーが発生しました:\n{e}")

if __name__ == "__main__":
    root = tk.Tk()
    #root.geometry("600x400")  # ウィンドウサイズの設定
    app = TextSaverApp(root)
    root.mainloop()
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?