■
ピアノみたいなものを作成してみた。
#!/usr/bin/env python import Tkinter import math import sndPlay class keyTk: def __init__(self,x1,y1,x2,y2,scale,A=440,color="white"): self.x1,self.y1,self.x2,self.y2,self.scale,self.A,self.color = x1,y1,x2,y2,scale,A,color def paint(self,canvas): self.rect = canvas.create_rectangle(self.x1,self.y1,self.x2,self.y2, outline='black', fill=self.color) def onClick(self): s = sndPlay.sndPlay() s.A = self.A s.addScale(self.scale,0.5) s.closeFile() class pianoTk: def __init__(self): window = Tkinter.Tk() self.width = 800 self.height = 200 self.canvas = Tkinter.Canvas(window, bg="white", width=self.width, height=self.height) self.canvas.pack() self.canvas.bind("<ButtonPress-1>",self.pressCanvas) self.objects = [] octaves = [0.5,1,2,3] for jj in range(len(octaves)): scales = [('A','white'),('AS','black'),('B','white'),('C','white'),('CS','black'), ('D','white'),('DS','black'),('E','white'),('F','white'),('FS','black'), ('G','white'),('GS','black'),] keyNum = len(scales) wid,hei = self.width/keyNum/len(octaves),self.height for ii in range(len(scales)): self.objects.append(keyTk((ii+len(scales)*jj)*wid,0, (ii+1+len(scales)*jj)*wid,hei, scales[ii][0],440*octaves[jj], scales[ii][1])) for o in self.objects: o.paint(self.canvas) self.window = window window.mainloop() def pressCanvas(self,event): for o in self.objects: if o.x1 <= event.x <= o.x2 and o.y1 <= event.y <= o.y2: o.onClick() break pianoTk()
以前作成したsndPlayをimportするので、どっかに置いておく必要がある。