kazumalab tech log

流行りとリラックマと嵐が大好きです。技術的ログ。

python勉強〜5日目〜

kazumaです。

今日はobject指向で色々試してみようと思います。

まずは前回書いたコードにfor文を追加して書いてみます。

def main():
    x = 10
    w = GraphWin("Window",200,200)
    for i in range(5):
        c = Circle(Point(100,100), x)
        c.draw(w)
        x = x + 10
        
    w.getMouse() # Pause to view result
    w.close()    # Close window when done

main()

これを実行すると

f:id:kazumalab:20150509210553p:plain

このようになります。
繰り返し円を描く際に直径xを+10していくようにしています。

c = Circle(Point(100,100),x)

この文をfor文外に書くとコンパイルエラーが出るので、毎回更新しないとダメらしいです。

今回はついでにClassの定義と継承を簡単にやっておきます。
(今後よく使いそうなので・・・)

まず今回はObject指向でのClass定義をし、Buttonを生成しようと思います。

# button.py
from graphics import *


class Button:
#まずClass名を書く。

    def __init__(self,win,center,width,height,label):

        w,h = width/2.0, height/2.0
        x,y = center.getX(), center.getY()
        self.xmax, self.xmin = x+w, x-w
        self.ymax, self.ymin = y+h, y-h
        p1 = Point(self.xmin, self.ymin)
        p2 = Point(self.xmax, self.ymax)

        self.rect = Rectangle(p1,p2)
        self.rect.setFill('lightgray')
        self.rect.draw(win)
        self.label = Text(center, label)
        self.label.draw(win)


    def clicked(self, p):
        
        return (self.active and
                self.xmin <= p.getX() <= self.xmax and
                self.ymin <= p.getY() <= self.ymax)

    def getLabel(self):
        
        return self.label.getText()

    def activate(self):
        self.label.setFill("black")
        self.active = True

    def deactivate(self):
        self.label.setFill("darkgrey")
        self.active = False
        

button.pyとして保存し、Class 名前: でClass名を指定しておきます。

コンストラクタは__init__で定義します。第一引数がselfでそれぞれのインスタンスを指します。
第二引数はユーザーが入力する値となってます。

このコードを保存しておきます。

次に読み込むファイルを書いていきます。

from graphics import *
from button import Button

def main():
    w = GraphWin("Window",200,200)
   

main()

from button import ButtonこれでClassを読み込むことができます。
さて、ボタンを生成してみましょう。

from graphics import *
from button import Button
def main():
    x = 10
    w = GraphWin("Window",200,200)
    button01 = Button(w,Point(100,100),100,20,"Button")
    w.getMouse() 
    w.close()
main()

このコードを実行すると。
f:id:kazumalab:20150509225757p:plain

buttonが生成されました。
ちょっとボタンが押される処理はしていませんがお許しを。
解説します。

変数名を指定し、コンストラクタを呼び出します。
wは指定したwindowに生成するということ。
pointは中点。
あとはClassにも書いてあるようにWidth , Height、Buttonに表示する文字です。

今日は雑ですが以上です。
間違っていれば指摘をお願いします。