python/tkinter屏幕停止显示画布更新

2024-09-24 10:24:48 发布

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

我有一个程序,更新(完整的图像,即旋转图像),然后改变图像tkinter.canvas.image文件然后打电话过来画布.updatestats()强制更改屏幕。时间。睡眠(0.0001)被调用,进程自身重复。你知道吗

直到鼠标指针变为一个蓝色的小圆圈,再加上一个围绕蓝色圆圈的亮条,它才能正常工作。如果我移动鼠标指针,圆就会相应地移动。可能30秒后,圆圈返回鼠标指针,屏幕立即变为30秒操作后的样子(此时屏幕在30秒操作中100%正确)。但是,在蓝色圆圈出现期间,屏幕不再更新。我怀疑这是一个可能的垃圾收集已经开始,并导致tkinter正常工作,但屏幕更新被挂起。这需要一段时间来开始,但之后经常发生。你知道吗

我试着导入gc。然后被处决gc.禁用()但这没有帮助。你知道吗

有人知道为什么会这样吗?你知道吗

有什么方法可以阻止这一切的发生吗?你知道吗

我的程序能确定屏幕更新的停止正在发生吗,这样我就可以暂停屏幕更新,直到完成为止?你知道吗


Tags: 文件图像image程序屏幕tkinter画布时间
1条回答
网友
1楼 · 发布于 2024-09-24 10:24:48

这是发生问题时正在执行的循环。记住,代码工作并产生正确的输出,除了当蓝圈取代鼠标指针时,代码继续正确执行,只是屏幕在30秒延迟期间没有更新,当蓝圈最终消失时,显示30秒执行的净结果。在我的代码中,没有任何地方可以更改鼠标指针。你知道吗

这是一台windows10计算机和python3.6。你知道吗

    while (fx != tx or fy != ty):
        if fx == tx:
            dx = 0
        elif fx > tx:
            dx = -2 if fx != tx+1 else -1
        else:
            dx =  2 if fx != tx-1 else  1
        if fy == ty:
            dy = 0
        elif fy > ty:
            dy = -2 if fy != ty+1 else -1
        else:
            dy =  2 if fy != ty-1 else  1
        steps += 1
        if steps > 0:
            if sAngle != eAngle:
                if eAngle < sAngle: sAngle -= 2
                else:               sAngle += 2
                im = Image.new("RGBA",(int(tileHeight+tileWidth/2),int(tileHeight+tileWidth/2)))
                if til.direction == North or til.direction == South:
                    im.paste(til.dom.raw[til.direction],(int((tileHeight+tileWidth/2-tileWidth)/2),int(tileWidth/4)))
                else:
                    im.paste(til.dom.raw[til.direction],(int(tileWidth/4),int((tileHeight+tileWidth/2-tileWidth)/2)))
                im = im.rotate(sAngle)
                imm = ImageTk.PhotoImage(im)        
                CANVAS.delete(til.canvasID)
                tags.remove(til.canvasID)
                til.canvasID = CANVAS.create_image(fx,fy,anchor=tk.CENTER,image=imm)
                tags.append(til.canvasID)

        CANVAS.move(til.canvasID,dx,dy)
        fx += dx
        fy += dy
        CANVAS.update_idletasks()
        time.sleep(0.0000001)

相关问题 更多 >