下面的代码应该画两条垂直线,一条红线从(50,0)到(50300),另一条由(150,50)到(150250)的随机像素组成。上面写着随机红.setPixel(150,x,randomRed)在第13行,它指出“Pixel”对象没有属性“setPixel”错误。我不明白为什么这是个错误。我必须设置像素对吗?在
from cImage import*
import random
myImWin = ImageWin("Line Image", 300, 300)
lineImage = EmptyImage(300,300)
redPixel = Pixel(255,0,0)
randomRed = Pixel(random.randint(0,255),0,0)
for i in range(300):
for x in range(250):
lineImage.setPixel(50,i,redPixel)
randomRed.setPixel(150,x,randomRed) # here is the error it points out
lineImage.draw(myImWin)
randomRed.save("lineImage.gif")
myImWin.exitonClick()
我猜您是在调用}。在
randomRed.setPixel(...)
而不是{randomRed
是Pixel
。你为什么要设置一个像素的像素?你以为那是什么意思?在您试图将
randomRed
Pixel
绘制到同一个lineImage
上,因此在使用.setPixel
时,它都应该是lineImage.setPixel
。在这个错误就是它所说的。当您编写类似
x.y(...)
的代码时,您正试图调用x
对象的y
方法。更准确地说,您尝试查找x
对象的y
属性,然后通过调用它将其视为一个函数。(方法是一种特殊类型的属性,并且是一种特殊类型的函数;x
在被调用时作为参数隐式传递给函数。)而且,你的循环逻辑是错误的。通过嵌套循环,可以为每个组合的(i,x)值运行最里面的代码。每一行都是一个独立的实体。在上运行另一个循环来绘制第二条线。在
i
上运行一个循环来绘制第一条线,在^{最后,您将不会得到一行“随机像素”,因为您使用给定的随机数创建一次
randomRed
像素,然后在整个行中重用相同的像素。要解决这个问题,请在绘制循环之前在循环中创建随机像素。然后,每次循环都会被重新创建,强制选择另一个随机数。在相关问题 更多 >
编程相关推荐