Windowsのメモ帳をつくってみる(2)
はじめに
本記事は、下記記事の続きです。 agepan.hatenablog.com
メニューバーの作成
GUIでテキストエディターを作成するにあたって、メニューバーは必要だなということで作成していきます。 今回は見た目のみで処理は別途考えることにします(Exit実行時プログラムを終了するようにだけしました)。
tk.Menu()によりメニューバーを定義します。
add_cascade()を使用して、メニューバーのデフォルトで表示されているメニューを記述します。 この時文字列はlabelを用いて指定します。
add_command()を使用して、cascade()で宣言した配下にさらに詳細メニューを作成することができます。 こちらも文字列は同様にlabelを用いて指定します。
command()を使用することで、add_command()をクリックした際の処理を指定することができます。
import tkinter as tk import sys class Textarea(tk.Frame): def __init__(self, master=None): # 親フレームの引継ぎ tk.Frame.__init__(self, master) # タイトル定義 master.title('test') # Windowの大きさの定義 master.geometry('1280x720') # Textareaの定義 self.text = tk.Text(master) #scrollbar self.scrollx = tk.Scrollbar(master, orient=tk.HORIZONTAL) self.scrolly = tk.Scrollbar(master, orient=tk.VERTICAL) self.scrollx.pack(side="bottom", fill="x") self.scrolly.pack(side="right", fill="y") # Textareaの表示 self.text.pack(fill="both", expand=True) # scrollbarとTextareaの同期 self.text["yscrollcommand"] = self.scrolly.set self.text["xscrollcommand"] = self.scrollx.set self.text["wrap"] = "none" # menubar men = tk.Menu(master) master.config(menu=men) menu_file = tk.Menu(men,tearoff=0) menu_edit = tk.Menu(men,tearoff=0) menu_format = tk.Menu(men,tearoff=0) menu_view = tk.Menu(men,tearoff=0) menu_help = tk.Menu(men,tearoff=0) men.add_cascade(label="file", menu=menu_file) menu_file.add_command(label='New', under=0) menu_file.add_command(label='Open...', under=0) menu_file.add_command(label='Save', under=0) menu_file.add_command(label='Save As...', under=0) menu_file.add_separator() menu_file.add_command(label='Page Setup...', under=0) menu_file.add_command(label='Print...', under=0) menu_file.add_separator() menu_file.add_command(label='Exit', under=0, command=sys.exit) men.add_cascade(label='Edit',menu=menu_edit) men.add_cascade(label='Format',menu=menu_format) men.add_cascade(label='View',menu=menu_view) men.add_cascade(label='Help',menu=menu_help) if __name__ == "__main__": root = tk.Tk() textarea = Textarea(root) root.mainloop()
これを実行すると以下のようにメニューバーを表示することができます。
Tab文字をスペースに
ふと、タブを入力したら、タブ文字で入力されていて、個人的に嫌だったのでスペースでのタブに変更します。
タブ関数と、バインドのショートカットを作成します。 タブ関数では、スペースを4つ入力するように処理を記述します。
また、
実際に作成したコードが以下になります。
class Textarea(tk.Frame): def tab(self, *args): self.text.insert(tk.INSERT, ' ' * 4) return 'break' def bind_shortcuts(self, *args): text = self.text text.bind('<Tab>', self.tab)
これで無事タブを4スペースで入力されるのでうれしくなれました。
さいごに
今回は、ちょっとした実装のみを行いました。 次は、行番号の表示に挑戦してみたいと思います。