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()
これを実行すると
このようになります。
繰り返し円を描く際に直径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()
このコードを実行すると。
buttonが生成されました。
ちょっとボタンが押される処理はしていませんがお許しを。
解説します。
変数名を指定し、コンストラクタを呼び出します。
wは指定したwindowに生成するということ。
pointは中点。
あとはClassにも書いてあるようにWidth , Height、Buttonに表示する文字です。
今日は雑ですが以上です。
間違っていれば指摘をお願いします。