今日も見に来てくださってありがとうございます。
みなさん、シュルテ・テーブルというものをご存知でしょうか。先日読んだ本に、脳のトレーニングとして紹介されていました。少し前にこれを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をセットしなきゃいけなくなってるし、一行が異様に長いところがあるし、自分で作ったプログラムなのですが、、、ちょっとわかりずらいなぁ。
とりあえず、動いているので、公開しようと思います。見れば見るほど修正したくなってきましたので、次回、リファクタリングします!

