【Part2】CustomTkinterを使って簡単なメモ帳を作ってみよう!

2026年3月13日金曜日

Python wxPython

t f B! P L
 ということでPart1の続きです。
続きといってもメモ帳製作は今回からはじめるので別にPart1は見なくてもいいです。

ちなみに、なぜメモ帳を作ったのかというと、Windowsの標準のメモ帳が多機能になって不便だからです。

ではさっそくいきましょう。

まずは見た目だけ


まずは見た目だけです。以下のコードをご覧ください。

import tkinter as tk
from tkinter import filedialog, messagebox
import customtkinter as ctk

class MyFrame(ctk.CTk):
    def __init__(self):
        super().__init__()
        self.title("メモ帳")
        self.geometry("900x600")

        self.menubar = tk.Menu(self)
        filemenu = tk.Menu(self.menubar, tearoff=0)
        filemenu.add_command(label="新規")
        filemenu.add_command(label="開く...")
        filemenu.add_command(label="名前を付けて保存...")
        filemenu.add_command(label="終了")
        self.menubar.add_cascade(label="ファイル", menu=filemenu)
        self.config(menu=self.menubar)

        self.textbox = ctk.CTkTextbox(self, wrap="none")
        self.textbox.pack(fill="both", expand=True)

if __name__ == "__main__":
    app = MyFrame()
    app.mainloop()

謎にCustomTkinterと普通のTkinterが混合しているのがわかると思いますが、これはメニューバーを普通のTkinterのを使うためです。一応CustomTkinter版のもあるんですが、私はメニューバーは古い方が好きというか...はい。

ちなみに普通のTkinterでは縦と横にスクロールバーを設置するのにめちゃくちゃ手間がかかるんですが、CustomTkinterのTextboxはwrap="none"にするだけで自動でスクロールバー制御を実現できます。

ちゃんとメニューバーを動作させよう!

では続いてちゃんとメニューバーのメニューが動作させたいと思います。
普通のTkinterと同じようにかけばおkです。


import tkinter as tk
from tkinter import filedialog, messagebox
import customtkinter as ctk

class MyFrame(ctk.CTk):
    def __init__(self):
        super().__init__()
        self.title("メモ帳")
        self.geometry("900x600")

        self.menubar = tk.Menu(self)
        filemenu = tk.Menu(self.menubar, tearoff=0)
        filemenu.add_command(label="新規", command=self.newfile)
        filemenu.add_command(label="開く...", command=self.openfile)
        filemenu.add_command(label="名前を付けて保存...", command=self.saveas)
        filemenu.add_command(label="終了", command=self.quit)
        self.menubar.add_cascade(label="ファイル", menu=filemenu)
        self.config(menu=self.menubar)

        self.textbox = ctk.CTkTextbox(self, wrap="none")
        self.textbox.pack(fill="both", expand=True)
    
    def newfile(self):
        self.textbox.delete("1.0", tk.END)
    
    def openfile(self):
        file = filedialog.askopenfilename()
        if file:
            f = open(file, "r", encoding="utf-8")
            self.textbox.delete("1.0", tk.END)
            self.textbox.insert("1.0", f.read())
            f.close()
    
    def saveas(self):
        file = filedialog.asksaveasfilename(defaultextension="txt")
        if file:
            f = open(file, "w", encoding="utf-8")
            f.write(self.textbox.get("1.0", tk.END))
            f.close()

if __name__ == "__main__":
    app = MyFrame()
    app.mainloop()

ということでこんな感じでしょうか。
ちなにになぜかTextbox.set()のような関数がないため、一度消去してからinsert()で挿入する必要があります。

まだ最低限もない

これで一応ファイルの読み書きくらいはできるようになりましたが、まだまだポンコツです。
Windows10時代の機能くらいはあってほしいのでPart3に続きます...

このブログを検索

要望について

ブログのレイアウトやテーマについての提案をいただきました。現在qooqテーマを適応中です。 よければフォームが期限切れしてしまったのでお問い合わせメールから要望等お願いします。

最近の出来事

最近の出来事
寿司打お勧め75位♪(練習モードだけど)

Welcome!

「プログラミング独学ブログ」へようこそ。 Yakinyといいます。幅広い範囲で投稿していますので、ぜひ過去の記事も見てみてください!!コメントも大歓迎です!

お問い合わせ

名前

メール *

メッセージ *

QooQ