クラスとオブジェクトについて
【環境条件】
OS:Windows 10
Python 3.6.1
【オブジェクト化するには】
玉を動かすプログラム「example07-08-01.py」をクラスを使って書いてみた。
「example07-08-01.py」リスト
# coding:utf-8
import tkinter as tk
class Ball:←クラス
#コンストラクタ
def __init__(self, x, y, dx, dy, color):←selfはオブジェクトを指し示す
#オブジェクト変数
self.x = x
self.y = y
self.dx = dx
self.dy = dy
self.color = color
#円を動かすメソッド
def move(self, canvas):
# いまの円を消す
canvas.create_oval(self.x - 20, self.y - 20, self.x + 20, self.y + 20, fill="white", width=0)←.create_oval()関数は円を描く命令、但し色は白
# X座標、Y座標を動かす
self.x = self.x + self.dx
self.y = self.y + self.dy
# 次の位置に円を描画する
canvas.create_oval(self.x - 20, self.y - 20, self.x + 20, self.y + 20, fill=self.color, width=0)
# 端を超えていたら反対向きにする
if self.x >= canvas.winfo_width():
self.dx = -1
if self.x <= 0:
self.dx = 1
if self.y >= canvas.winfo_height():
self.dy = -1
if self.y <= 0:
self.dy = 1
# 円をひとつ作る。インスタンス化
b = Ball(400, 300, 1, 1, "red")←Ballのオブジェクトを作る
#複数の円の場合は下記のように書き換える
balls = [
Ball(400,300,1,1,"red"),
Ball(200,100,-1,1,"green"),
Ball(100,200,1,-1,"blue")
]
#定期的にタイマーで起動するloop関数を作る
def loop():
# 動かす
#複数の場合はfor b in balls:を加える
b.move(canvas)
# もう一回
root.after(10,loop)
# ウィンドウを描く
root = tk.Tk()
root.geometry("800x600")
root.title("クラス化")
# Canvas(キャンパス)を置く
canvas =tk.Canvas(root, width =800,height = 600, bg="white")
canvas.place(x = 0, y = 0)
# タイマーをセット
root.after(10, loop)
root.mainloop()
【起動】
プログラムを起動させる