ということで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に続きます...
0 件のコメント:
コメントを投稿