“Pixel”对象没有属性“setPixel”错误,无法找出原因

2024-09-27 22:25:58 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码应该画两条垂直线,一条红线从(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()

Tags: 代码inimportfor错误rangerandom像素
2条回答

我猜您是在调用randomRed.setPixel(...)而不是{}。在

randomRedPixel。你为什么要设置一个像素的像素?你以为那是什么意思?在

您试图将randomRedPixel绘制到同一个lineImage上,因此在使用.setPixel时,它都应该是lineImage.setPixel。在

这个错误就是它所说的。当您编写类似x.y(...)的代码时,您正试图调用x对象的y方法。更准确地说,您尝试查找x对象的y属性,然后通过调用它将其视为一个函数。(方法是一种特殊类型的属性,并且是一种特殊类型的函数;x在被调用时作为参数隐式传递给函数。)

而且,你的循环逻辑是错误的。通过嵌套循环,可以为每个组合的(i,x)值运行最里面的代码。每一行都是一个独立的实体。在i上运行一个循环来绘制第一条线,在^{上运行另一个循环来绘制第二条线。在

最后,您将不会得到一行“随机像素”,因为您使用给定的随机数创建一次randomRed像素,然后在整个行中重用相同的像素。要解决这个问题,请在绘制循环之前在循环中创建随机像素。然后,每次循环都会被重新创建,强制选择另一个随机数。在

相关问题 更多 >

    热门问题