Processing.py空白窗口问题

时间:2018-10-24 18:57:51

标签: python python-3.x user-interface 2d processing

我尝试使用processing.py编写A * alg,但是代码开头出现问题:我的窗口完全空白

因此,我希望出现一个网格,等待用户单击某个单元格,然后用黑色矩形填充该单元格。 但是,我只希望它在代码的开头运行,所以没有将其放在draw函数中。

这是我的代码:

taille = 400
pas = taille // 20

def setup():
    size(taille, taille)
    background(255, 255, 255)
    stroke(0)
    strokeWeight(2)
    frameRate(20)
    for i in range(pas, taille, pas):
        line(i, 0, i, taille)
        line(0, i, taille, i)
    drawRect()

def drawRect():    
    x, y = pressed()
    for i in range(1, taille // pas - 1):
        for j in range(1, taille // pas - 1):
            if i * pas <= x and x <= (i + 1) * pas:
                if j * pas <= y and y <= (j + 1) * pas:
                    rect(i * pas, j * pas, pas, pas)

def pressed():
    while True:
        if mousePressed:
            return (mouseX, mouseY)        

我高度怀疑该错误来自drawRect函数,因为我在添加网格之前设法显示了网格。

1 个答案:

答案 0 :(得分:2)

  

因此,我希望出现一个网格,等待用户单击某个单元格,然后用黑色矩形填充该单元格。但是,我只希望它在我的代码开头运行,所以我没有将它放在draw函数中。

无论如何,我建议使用draw函数,以根据程序的当前状态连续绘制场景。

请注意,您的程序会陷入无限循环。变量mousePressedmouseXmouseY从未更新。此变量不会神奇地更改其状态。在执行draw函数后,它们会在2帧之间更改状态。处理进行事件处理并更改内置变量。您不会给处理做任何工作的机会。

创建为变量,该变量会注意到“点击”的x和y窗口坐标:

enter_x = -1
enter_y = -1

实施mousePressed事件以接收“点击”:

def mousePressed():
global enter_x, enter_y
if enter_x < 0 or enter_y < 0:
    enter_x = mouseX
    enter_y = mouseY 

如果{click}坐标在>= 0中有效(draw function),则将黑色矩形绘制到上:

def draw():   
    global enter_x, enter_y

    if enter_x >= 0 and enter_y >= 0:
        stroke(0)  
        fill(0)
        ix = enter_x // pas
        iy = enter_y // pas
        rect(ix * pas, iy * pas, pas, pas)

完整代码如下:

taille = 400
pas = taille // 20

def setup():
    size(taille, taille)
    background(255, 255, 255)
    stroke(0)
    strokeWeight(2)
    frameRate(20)
    for i in range(pas, taille, pas):
        line(i, 0, i, taille) 
        line(0, i, taille, i)

enter_x = -1
enter_y = -1

def mousePressed():
    global enter_x, enter_y
    if enter_x < 0 or enter_y < 0:
        enter_x = mouseX
        enter_y = mouseY    

def draw():   
    global enter_x, enter_y

    if enter_x >= 0 and enter_y >= 0:
        stroke(0)  
        fill(0)
        ix = enter_x // pas
        iy = enter_y // pas
        rect(ix * pas, iy * pas, pas, pas)

请注意,也可能需要在draw函数中绘制网格。通常,最好是每帧重绘场景,而不是“撤消”已绘制的内容。