tkinterでメモ帳を作成【第3回】~メニューバーを作成する~

Python
田中太郎
田中太郎

今回は、メモ帳にメニューバーを追加します。

前回

前回はメモ帳に保存機能を搭載しました。

今回は、メニューバーを作成しましょう。

完成イメージ

メモ帳にメニューバーを追加します。

コード

notepad.py
import tkinter as tk

import notepad_func

root = tk.Tk()

# メニューバーを作成する
notepad_func.create_menubar(root)

# テキストボックスを作成する
text_widget = tk.Text(root, wrap=tk.CHAR)
text_widget.grid(column=0, row=0, sticky=(tk.N, tk.S, tk.E, tk.W))

# テキストボックスの大きさを可変にする
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)

# ctrl-sでファイルを保存
root.bind('<Control-KeyPress-s>', notepad_func.save_file_as)

# タイトルとかを設定
root.title("Notepad")
root.geometry("500x250")
root.mainloop()
notepad_func.py
import tkinter as tk
import tkinter.filedialog


def save_file_as(event=None):
    """名前を付けて保存する"""
    f_type = [('Text', '*.txt')]

    file_path = tkinter.filedialog.asksaveasfilename(
        filetypes=f_type)

    if file_path != "":
        with open(file_path, "w") as f:
            f.write(text_widget.get("1.0", "end-1c"))

    return


def create_menubar(root):
    """メニューバーを作成する"""
    menubar = tk.Menu(root)

    # ファイル
    filemenu = tk.Menu(menubar, tearoff=0)
    filemenu.add_command(label="新規(N)")
    filemenu.add_command(label="開く(O)...")
    filemenu.add_command(label="上書き保存(S)")
    filemenu.add_command(label="名前を付けて保存(A)...", command=save_file_as)
    filemenu.add_separator()
    filemenu.add_command(label="終了(X)", command=root.destroy)
    menubar.add_cascade(label="ファイル(F)", menu=filemenu)

    # ヘルプ
    helpmenu = tk.Menu(menubar, tearoff=0)
    helpmenu.add_command(label="About...")
    menubar.add_cascade(label="ヘルプ(H)", menu=helpmenu)

    root.config(menu=menubar)

解説

create_menubar

メニューバーを作成します。

menubar = tk.Menu(root)

メニューバーのオブジェクトを作成します。

filemenu.add_command(label=”名前を付けて保存(A)…”, command=save_file_as)

メニューバーの内容を作成します。”名前を付けて保存(A)”をクリックするとcommand=save_file_asで指定した関数が起動します。

今回はファイル保存ダイアログが開きます。

filemenu.add_separator()

は上記の図の”名前を付けて保存(A)”と”終了(X)”の間の線を作っています。

まとめ

今回はメモ帳にメニューバーを追加しました。編集して、独自の機能を入れてみて下さい。

コメント

  1. mizukatu より:

    mizukatu
    今回でネットへの投稿が2回目、やっとできるところまでになりました。
    ラズパイ4でPythonとLazarus、OpenSCAD等が理解不足のまま少し実用になりつつ。
    そんな中で私の使っているエディタを使いこなしていません。
    今回(もう一年前に投稿されていますね!)拝見して。。これだーーと
    第3回まで拝見しています。もし追加されているようなら、便乗を。。と
    万年初心者なので機能追加は不可能と思いますが挑戦してみます。
    機能として[Cut,Copy,Paste][Cut+Paste][一括変換][検索][ツール実行]
    [漢字対応]が出来れば良いかな。。と
    ただし、私にはまだ、そこまで対応できていないと感じています。
    何時にになるかは。。。。
    でも、これまでの記事から少しでも進めるものと考えています

    ほとんどがシロート状態の個人勉強です。失礼がありましたらご勘弁を。
    これからも利用させてください。

    • 田中太郎 より:

      コメントありがとうございます!
      最近はPythonを触ってないので。。
      お力にになれるかはわかりませんが、助けになれば幸いです。

  2. mizukatu より:

    mizukatu
    田中さん、ご連絡が可能なんですね。感激!!
    私がやっと、たどり着いた。。と感じています。
    今でこそ、Lazarus上からpythonを通して種々のコマンドが使えています。
    ラズパイのパネルに登録が有ると「利用が便利」になりました。
    本当は[Thonny][mu][Spyder][Geany]の[python-Tool]を使いこなしたいのですが。。
    実際の利用法が理解できていません。
    でも、いろんなツールが紹介されていますので、もっと悩んでみます。
    今月初めから[MegEdit]として[Lazarus]で挑戦しては、いますが。。。?
    本来はWindows/XPなんです。それ以上には他のマシンの関係で???

    今回でネットへの投稿が3回目、やっとできるところまでになりました。
    ラズパイ4の64bit対応でここまで、辿り着きました。

    MariaDBの使い方をLazarusにセットしたんですが使い方を忘れています。
    一つやってると前のものを忘れてしまう年齢ですから。。ね

タイトルとURLをコピーしました