今日も見に来てくださってありがとうございます。
みなさん、シュルテ・テーブルというものをご存知でしょうか。先日読んだ本に、脳のトレーニングとして紹介されていました。少し前にこれをtkinterで作ったので、紹介したいと思います。
できあがりイメージ
シュルテ・テーブルは、以下のような表です。これで、周辺視野、注意力、セルフコントロール、集中力などが鍛えられるということです。表の中心に視線を固定して、周辺視野だけを使って、1~25を順番に探すだけです。しばらく続けれていれば、12秒~15秒ほどで25まで数えられるようになるそうです。そして、これだけで、観察力が高まるそうですよ。
ソースコード
ソースコードです。
from tkinter import Tk, Button, Canvas, Frame, Label, messagebox from random import sample from time import time class SchulteTable(Frame): MARGIN = 10 DISTANCE = 50 WIDTH = 5 HEIGHT = 5 FONT_SIZE = 25 text = list() def __init__(self, master=None): if master == None: master = Tk() super().__init__(master) master.title("Schulte Table") self.master = master self.pack() self.create_widgets() self.bind("<Button-1>", self.redraw_text) def create_widgets(self): self.info = Label(self, text="Tap anywhere to start", font=("",14)) self.info.pack(side="top") self.info.bind("<Button-1>", self.redraw_text) self.canvas = Canvas(self,width=self.MARGIN*2+self.WIDTH*self.DISTANCE, height=self.MARGIN*2+self.HEIGHT*self.DISTANCE) for i in range(self.WIDTH+1): self.line1 = self.canvas.create_line(self.MARGIN+i*self.DISTANCE,self.MARGIN,self.MARGIN+i*self.DISTANCE,self.MARGIN+self.DISTANCE*self.HEIGHT) for i in range(self.HEIGHT+1): self.line1 = self.canvas.create_line(self.MARGIN,self.MARGIN+i*self.DISTANCE,self.MARGIN+self.WIDTH*self.DISTANCE,self.MARGIN+i*self.DISTANCE) self.canvas.pack(side="top") self.canvas.bind("<Button-1>", self.redraw_text) self.quit = Button(self, text="QUIT", fg="red", command=self.master.destroy) self.quit.pack(side="bottom") def redraw_text(self, event): if not len(self.text): self.info["text"] = "Tap anywhere to STOP" self.time = time() self.after(100, self.time_update) else: for t in self.text: self.canvas.delete(t) self.text = list() messagebox.showinfo("結果",f"かかった時間は、{self.elapse_time:0.2f}秒です。") self.info["text"] = "Tap anywhere to start" return counter = 0 answer = sample(range(1,self.WIDTH*self.HEIGHT+1),self.WIDTH*self.HEIGHT) for x in range(self.WIDTH): for y in range(self.HEIGHT): self.text.append(self.canvas.create_text(self.MARGIN+x*self.DISTANCE+self.DISTANCE/2,self.MARGIN+y*self.DISTANCE+self.DISTANCE/2,text=str(answer[counter]),font=("",self.FONT_SIZE))) counter+=1 def time_update(self): if not len(self.text): return self.elapse_time = time() - self.time self.info["text"] = f"Tap anywhere to STOP:{self.elapse_time:0.2f}" if len(self.text): self.after(10, self.time_update) if __name__ == '__main__': shulteTable = SchulteTable() shulteTable.mainloop()
このシュルテ・テーブル、ちょっと昔に作ったのですが、いけてませんね。なぜかFrameを継承しているし、そのせいでmasterをセットしなきゃいけなくなってるし、一行が異様に長いところがあるし、自分で作ったプログラムなのですが、、、ちょっとわかりずらいなぁ。
とりあえず、動いているので、公開しようと思います。見れば見るほど修正したくなってきましたので、次回、リファクタリングします!