from email import message
import tkinter as tk
import tkinter.filedialog as filedialog
from unittest import result
import chardet
import tkinter.ttk as ttk
from tkinter import messagebox
import datetime
import pyperclip
import tkinter.font as font
import winsound
import os
import collections
import webbrowser
import sys
import pyperclip
#ver3.6.8動作可能
from fabric.colors import red, green, yellow, blue, magenta, cyan, white
#各イベントの設定
class Utils():
def __init__(self):
self.root = tk.Tk()
self.root.title("メモ帳")
self.root.geometry("1270x720")
self.color = "gray13"
self.textcolor = "white"
self.result = ""
self.size = 15
self.text2 = "none"
self.count1 = 0
self.none = "none"
self.filename = "none"
#実行するときはアイコンのPATHのやり直す
#self.root.iconbitmap("背景透明メモl.ico")
self.root.bind("<Control-s>",self.onSaveskey)
self.root.bind("<Alt-s>",self.onSave2)
self.root.bind("<Control-o>",self.onOpen2)
self.root.bind("<Control-t>",self.time2)
self.root.bind("<Control-b>",self.big2)
self.root.bind("<Control-m>",self.small2)
self.root.bind("<Control-d>",self.default)
self.root.bind("<Control-f>",self.sub_window1)
self.root.bind("<Control-n>",self.new1)
self.font = "MS ゴシック"
self.s = "sotugyou-11.19\sotugyou-10 (1).15\卒業制作 (1)\maintest.txt"
self.fonttest = font.Font
self.url = "https://sites.google.com/view/memotyo/"
self.url1 = "https://youtu.be/W_5R7GUPthc"
self.url2 = "https://www.youtube.com/channel/UCMYZZ-AZxzz6VMqk0yddHvw"
#tk.iconbitmap
#self.c = collections.Counter(self.str)
#font = tkinter.StringVar(root)
print(self.fonttest)
#メニューバーの設定(ファイル)
menubar = tk.Menu(self.root)
FileMenu = tk.Menu(tearoff=0)
FileMenu.add_command(label="新規(Ctrl+N)",command=self.new)
FileMenu.add_command(label="開く(Ctrl+O)",command=self.onOpen)
FileMenu.add_command(label="名前を付けて保存(Alt+S)",command=self.onSave)
FileMenu.add_command(label="保存(Ctrl+S)",command=self.onSaves)
FileMenu.add_separator()
FileMenu.add_command(label="終了",command=self.onExit)
#メニューバーの設定(編集)
helpmenu = tk.Menu(menubar, tearoff=0,)
helpmenu.add_command(label='現在時刻を入力(Ctrl+T)', command=self.time)
helpmenu.add_command(label='検索する(ファイル開くと使用可能)(Ctrol+F)', command=self.sub_window)
helpmenu.add_command(label='全て選択(Ctrol+A)', command=self.selct_all)
helpmenu.add_command(label='コピー(Ctrol+C)', command=self.copy)
helpmenu.add_command(label='貼り付け(Ctrol+V)', command=self.paste)
helpmenu.add_command(label='切り取り(Ctrol+X)', command=self.cut)
#メニューバーの設定(表示)
show = tk.Menu(menubar, tearoff=0)
show.add_command(label='White', command=self.white)
show.add_command(label='Black', command=self.black)
show.add_command(label='good eyes1', command=self.goodeyes1)
show.add_command(label='good eyes2', command=self.goodeyes2)
show.add_separator()
show.add_command(label='入力した文字をターミナルに出力', command=self.test)
show.add_separator()
show.add_command(label='文字サイズ拡大(Ctrol+b)', command=self.big)
show.add_command(label='文字サイズデフォルト(Ctrol+d) ', command=self.default2)
show.add_command(label='文字サイズ縮小(Ctrol+m)', command=self.small)
show5 = tk.Menu(self.root,tearoff=0)
show5.add_command(label='MS ゴシック', command=self.font1)
show5.add_command(label='Arial', command=self.font2)
show5.add_command(label='游ゴシック', command=self.font3)
show5.add_command(label='HGP創英プレゼンス', command=self.font4)
show5.add_command(label='HGP創英角ポップ', command=self.font5)
show5.add_command(label='デジタル 教科書体', command=self.font6)
show5.add_command(label='HG行書体', command=self.font7)
show5.add_command(label='HGS教科書体', command=self.font8)
show5.add_separator()
show5.add_command(label='その他', command=self.fonts)
show6 = tk.Menu(menubar,tearoff=0)
show6.add_command(label='Appをダウンロード', command=self.down)
show6.add_command(label='説明動画', command=self.movie)
show6.add_command(label='作成者チャンネル', command=self.cych)
#BGM = tk.Menu(self.root,tearoff=0)
#BGM.add_command(label="2:23AM",command=self.bgm1)
edit = tk.Menu()
MenuBar = tk.Menu()
#ウィンドウに表示
MenuBar.add_cascade(label="ファイル", menu=FileMenu)
MenuBar.add_cascade(label="編集", menu=helpmenu)
MenuBar.add_cascade(label="表示", menu=show)
MenuBar.add_cascade(label="フォント", menu=show5)
MenuBar.add_cascade(label="その他", menu=show6)
#MenuBar.add_cascade(label="BGM",menu=BGM)
self.root.config(menu=MenuBar)
def text(self):
#wpap=tk.NONEで、折り返しをオフにできる。
self.textbox = tk.Text(self.root,wrap = tk.NONE,bg=self.color ,fg=self.textcolor,font=50,height=80)
self.textbox.configure(font=(self.font,self.size))
self.yscroll = tk.Scrollbar(self.root, orient=tk.VERTICAL, command=self.textbox.yview)
self.yscroll.pack(side=tk.RIGHT, fill="y")
self.xscroll = tk.Scrollbar(self.root, orient=tk.HORIZONTAL, command=self.textbox.xview)
self.xscroll.pack(side=tk.BOTTOM, fill="x")
self.textbox["yscrollcommand"] = self.yscroll.set
self.textbox["xscrollcommand"] = self.xscroll.set
self.textbox.pack(fill=tk.BOTH)
#フォーカスの設定
self.textbox.focus_set()
self.none = self.textbox.get("1.0","end")
def onOpen(self):
#「開く」イベント
dialog = filedialog.askopenfilename(filetypes=[("All Files","*.*")])
if len(dialog) != 0:
#文字コードを自動識別して読み取るコード
FILENAME = dialog
self.filename = FILENAME
tmp = open(FILENAME,"rb")
encode = chardet.detect(tmp.read())["encoding"]
tmp.close()
file = open(FILENAME,"r",encoding=encode,errors="ignore")
text = file.read()
file.close()
print(dialog)
#一度文字を全て削除してから挿入する
self.textbox.delete("1.0",tk.END)
self.textbox.insert("1.0",text)
self.text2 = self.textbox.get("1.0","end")
def onOpen2(self,event):
#「開く」イベント
dialog = filedialog.askopenfilename(filetypes=[("All Files","*.*")])
self.s = os.path.abspath(os.curdir)
print(self.s)
if len(dialog) != 0:
#文字コードを自動識別して読み取るコード
self.FILENAME = dialog
print(self.FILENAME)
self.filename = self.FILENAME
tmp = open(self.FILENAME,"rb")
encode = chardet.detect(tmp.read())["encoding"]
tmp.close()
file = open(self.FILENAME,"r",encoding=encode,errors="ignore")
text = file.read()
file.close()
#一度文字を全て削除してから挿入する
self.textbox.delete("1.0",tk.END)
self.textbox.insert("1.0",text)
self.text2 = self.textbox.get("1.0","end")
def onSave(self):
#「保存」するイベント
dialog = filedialog.asksaveasfilename(filetypes=[("All Files","*.*")])
defaultextension = "txt"
if len(dialog) != 0:
file = open(dialog,"w",encoding="UTF-8",errors="ignore")
file.write(self.textbox.get("1.0",tk.END))
self.text2 = self.textbox.get("1.0","end")
self.none = self.textbox.get("1.0","end")
file.close()
def onSaves(self):
self.text2 = self.textbox.get("1.0","end")
defaultextension = "txt"
print(self.filename)
print(type(self.filename))
if self.filename == "none":
self.onSave()
else:
file = open(self.filename,"w",encoding="UTF-8",errors="ignore")
file.write(self.textbox.get("1.0",tk.END))
file.close()
def onSaveskey(self,event):
self.text2 = self.textbox.get("1.0","end")
defaultextension = "txt"
print(self.filename)
print(type(self.filename))
if self.filename == "none":
self.onSave()
else:
file = open(self.filename,"w",encoding="UTF-8",errors="ignore")
file.write(self.textbox.get("1.0",tk.END))
file.close()
#「保存」するイベント
def onSave2(self,event):
#「保存」するイベント
dialog = filedialog.asksaveasfilename(filetypes=[("All Files","*.*")])
defaultextension = "txt"
if len(dialog) != 0:
file = open(dialog,"w",encoding="UTF-8",errors="ignore")
file.write(self.textbox.get("1.0",tk.END))
self.text2 = self.textbox.get("1.0","end")
self.none = self.textbox.get("1.0","end")
file.close()
def onSave3(self):
defaultextension = "txt"
print(self.filename)
print(type(self.filename))
if self.filename == "none":
self.onSave()
else:
file = open(self.filename,"w",encoding="UTF-8",errors="ignore")
file.write(self.textbox.get("1.0",tk.END))
file.close()
self.root.destroy()
def onExit(self):
#self.text2 = self.textbox.get("1.0","end")
if self.textbox.get("1.0","end") == self.none:
ret=messagebox.askyesnocancel('メモ帳','名前を付けて保存しますか?')
if ret == True:
self.onSave()
if ret == False:
self.root.destroy()
else:
if self.textbox.get("1.0","end") == self.text2:
self.root.destroy()
else:
ret2=messagebox.askyesnocancel('メモ帳','上書き保存または名前を付けて保存をしますか?')
if ret2 == True:
self.onSave3()
if ret2 == False:
self.root.destroy()
#「終了」するイベントaskyesnocancel
def test(self):
self.result=self.textbox.get("1.0","end")
print(self.result)
def time(self):
now=datetime.datetime.now()
time2=format(now,'%Y/%m/%d/%H:%M:%S')
print(now)
print(time2)
self.textbox.insert(tk.END,time2)
def time2(self,event):
now=datetime.datetime.now()
time2=format(now,'%Y/%m/%d/%H:%M:%S')
print(now)
print(time2)
self.textbox.insert(tk.END,time2)
def selct_all(self, event=None):
self.textbox.tag_add(tk.SEL, '1.0', tk.END+'-1c')
self.textbox.mark_set(tk.INSERT, '1.0')
self.textbox.see(tk.INSERT)
def copy(self, event=None):
if self.textbox.tag_ranges(tk.SEL):
text5 = self.textbox.get(tk.SEL_FIRST, tk.SEL_LAST)
self.root.clipboard_clear()
self.root.clipboard_append(text5)
def paste(self, event=None):
text5 = self.root.selection_get(selection='CLIPBOARD')
if text5:
self.textbox.insert(tk.INSERT, text5)
self.textbox.tag_remove(tk.SEL, '1.0', tk.END)
self.textbox.see(tk.INSERT)
def cut(self, event=None):
if self.textbox.tag_ranges(tk.SEL):
self.copy()
self.textbox.delete(tk.SEL_FIRST, tk.SEL_LAST)
def black(self):
self.color = "gray13"
self.textcolor = "white"
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
self.test()
self.textbox.insert(tk.END,texttest)
#elf.textbox.insert("1.0",self.result)
#file.write(self.textbox)
def white(self):
self.color = "gray97"
self.textcolor = "gray5"
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
self.test()
self.textbox.insert(tk.END,texttest)
#self.textbox.insert(tk.END,self.result)
def goodeyes1(self):
self.color = "#3CB371"
self.textcolor = "gray5"
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
self.test()
self.textbox.insert(tk.END,texttest)
#self.textbox.insert("1.0",self.result)
def goodeyes2(self):
print(self.filename)
self.color = "#79CF9F"
self.textcolor = "gray5"
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
self.test()
self.textbox.insert(tk.END,texttest)
#self.textbox.insert("1.0",self.result)
def big(self):
self.size = self.size + 5
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
self.textbox.insert(tk.END,texttest)
def default(self,event):
self.size = 15
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
self.textbox.insert(tk.END,texttest)
def default2(self) :
self.size = 15
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
self.textbox.insert(tk.END,texttest)
def big2(self,event):
self.size = self.size + 5
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
self.textbox.insert(tk.END,texttest)
def small(self):
self.size = self.size - 2
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
self.textbox.insert(tk.END,texttest)
def small2(self,event):
self.size = self.size - 2
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
self.textbox.insert(tk.END,texttest)
def font1(self):
self.font = "MS ゴシック"
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
print(self.font)
self.textbox.insert(tk.END,texttest)
def font2(self):
self.font = "Arial"
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
print(self.font)
self.textbox.insert(tk.END,texttest)
def font3(self):
self.font= "@游ゴシック"
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
print(self.font)
self.textbox.insert(tk.END,texttest)
def font4(self):
self.font = "HGP創英プレゼンスEB"
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
print(self.font)
self.textbox.insert(tk.END,texttest)
def font5(self):
self.font = "HGP創英角ポップ体"
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
self.textbox.insert(tk.END,texttest)
def font6(self):
self.font = "UD デジタル 教科書体 NK-B"
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
self.textbox.insert(tk.END,texttest)
def font7(self):
self.font = "HG行書体"
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
self.textbox.insert(tk.END,texttest)
def font8(self):
self.font = "HGS教科書体"
texttest = self.textbox.get("1.0","end")
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
self.textbox.insert(tk.END,texttest)
def fonts(self):
sub_win = tk.Toplevel()
sub_win.geometry("500x100")
texttest = self.textbox.get("1.0","end")
#項目選択時に実行する関数
def show_selected(event):
n = Listbox.curselection()
#self.font = l
self.font =Listbox.get(n) #選択項目のindex取得
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text() #indexを用いて値を取得し、varにセット
print(self.font)
self.textbox.insert(tk.END,texttest)
#選択した値を格納する変数
self.l = tk.StringVar(sub_win)
fonts = (font.families())
lists = tk.StringVar(value=fonts)
frame = tk.Frame(sub_win)
Listbox = tk.Listbox(frame, listvariable=lists, height=4)
# print(type(lists[0]))
#表示用ラベル
l = tk.Label(
sub_win,
textvariable=self.font, #選択した値
width=15,
)
l.pack()
frame.pack(padx=100,pady=10)
scrollbar = tk.Scrollbar(frame, orient=tk.VERTICAL, command=Listbox.yview)
# スクロールバーをListboxに反映
Listbox["yscrollcommand"] = scrollbar.set
#Listboxの生成
Listbox = tk.Listbox(frame, listvariable=lists, height=4) #値をセット
#項目選択時にshow_selectedを実行
Listbox.bind(
"<<ListboxSelect>>",
show_selected,
)
Listbox.grid(row=0, column=0)
scrollbar.grid(row=0, column=1, sticky=(tk.N, tk.S))
# 各種ウィジェットの設置
def down(self):
webbrowser.open(self.url, new=0, autoraise=True)
def movie(self):
webbrowser.open(self.url1, new=0, autoraise=True)
def cych(self):
webbrowser.open(self.url2, new=0, autoraise=True)
def new(self):
ret=messagebox.askyesnocancel('メモ帳','名前を付けて保存しますか?')
if ret == True:
self.onSave()
#「終了」するイベントaskyesnocancel
else:
pass
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
def new1(self,event):
ret=messagebox.askyesnocancel('メモ帳','名前を付けて保存しますか?')
if ret == True:
self.onSave()
#「終了」するイベントaskyesnocancel
else:
pass
self.textbox.destroy()
self.xscroll.destroy()
self.yscroll.destroy()
self.text()
def sub_window1(self,event):
self.sub_win1 = tk.Toplevel()
self.e = tk.Entry(self.sub_win1)
self.e.pack()
#Button
b = tk.Button(self.sub_win1,text="検索!!",command=self.show_entry,)
b.pack()
def sub_window(self):
self.sub_win1 = tk.Toplevel()
self.e = tk.Entry(self.sub_win1)
self.e.pack()
#Button
b = tk.Button(self.sub_win1,text="検索!!",command=self.show_entry,)
b.pack()
def show_entry(self):
self.f = self.textbox.get("end")
#print(self.f.count(self.e.get))
#print(self.textbox.get("1.0","end"))
print("検索した文字["+self.e.get()+"]") #Entryの入力値を取得して出力
f = open(self.filename, "r",encoding="utf-8")
schedules = f.readlines()
f.close
for schedule in schedules:
schedule_strip = schedule.strip()
if self.e.get() in schedule_strip:
print(yellow(schedule_strip)+"[指定した文字]")
if self.e.get() == "none":
print("指定した文字は発見されませんでした。")
else:
print("文字が発見されました。")
print(blue("すべての行↓"))
print("["+red(self.f)+"]")
#Entry
def test1 (self):
print(self.s)
#btnRead.pack()
def tkinter(self):
self.text()
print(self.color)
self.root.mainloop()
def main():
utils=Utils()
utils.tkinter()
# main関数の実行
if __name__ == "__main__":
main()