前提・実現したいこと
今、家(としている物)をclassを用いて4つ並べるプログラムを参考書を用いて作成しようとしています。
以前までdataclassを用いてclassを定義していましたが、今回の問いではdataclassではなく__init__を使ってプログラムをさくせいせよとあるので使ってみたのですが、プログラムは作動しませんでした。
下に乗せているプログラムのどこを変更すれば正しく作動するのか教えていただきたいです。
また、エラーメッセージには以下のことが記されていますが、おそらくw,roof_color, wall_colorも定義されていないことになってるのではないかなと思っています。
今回の下のコードで正しく作動すると思った根拠はx, y, w, h, roof_color, wall_colorを同じクラス内で定義しているからdef init... で定義したことをdef draw...のところで使えるのではないかと考えました。この考えのおかしいところを指摘していただきたいです。
発生している問題・エラーメッセージ
canvas.create_rectangle(x, y + h/2, x + w, y + h, NameError: name 'h' is not defined
該当のソースコード
from tkinter import * class House: def __init__(self, w, h, roof_color, wall_color): self.w = w self.h = h self.roof_color = roof_color self.wall_color = wall_color def draw(self, x, y): self.x = x self.y = y canvas.create_rectangle(x, y + h/2, x + w, y + h, roof_color, wall_color) canvas.create_polygon(x + w/2, y, x, y + h/2, x + w, y + h/2, outline=roof_color, fill=roof_color) tk = Tk() canvas = Canvas(tk, width=500, height=400, bd=0) canvas.pack() houses = [ House(50, 100, "green", "white"), House(100, 70, "bule", "gley"), House(70, 120, "blue", "white"), House(50, 50, "red", "orange"), ] x = 0 y = 100 PAD = 10 for house in houses: house.draw(x, y) x = x + house.w + pad
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/22 06:46
2020/10/22 06:50
2020/10/22 07:03