首页 > 解决方案 > 在关闭跟踪器的 Python 乌龟中,有没有办法在不使用 screen.update() 的情况下更新屏幕?

问题描述

我是 Python 编程新手。大约三周前,我使用海龟模块完成了俄罗斯方块克隆来测试我的技能。我的印象是,当我关闭动画跟踪器时,我必须使用该update()方法手动更新窗口。昨天,在使用 turtle 模块编写蛇克隆时,我不得不向朋友解释为什么我要手动更新屏幕。为了证明,我打开了俄罗斯方块并注释掉了update()表明游戏无法运行的方法。令我惊讶的是,它确实有效,我无法理解它是如何工作的,因为如果没有该update()方法,即使我的蛇代码也无法工作。

这是俄罗斯方块代码的主循环的一部分:

while not game_over:

if not current_piece.does_piece_fit(starting_row + 2, starting_column, current_piece.current_piece):
    game_over = True
wn.update()
movement()
marco.update_grid()
marco_next.show_next_piece(next_piece)
show_score()
current_piece.proyeccion()
marco_next.show_text(x_text_next_piece, y_text_next_piece, "Next Piece:", normal_style)
marco_next.show_text(x_text_hold, y_text_hold, "Hold:", normal_style)
show_instructions(x_text_instructions, y_text_instructions, instructions_text, smaller_style)

if holding:
    marco_hold.show_hold_piece(hold_piece)

如果该wn.update()行被注释掉,它不应该工作,但不知何故。代码有点长,我是这个网站的新手,所以我不知道完全发布它是否会被认为是坏的或粗鲁的。感谢您阅读本文,对于糟糕的英语和混乱的代码感到抱歉。

标签: pythonturtle-graphicspython-turtle

解决方案


一些海龟命令调用update()独立于你调用它。有些人喜欢end_fill()直接做,有些人喜欢dot()间接做,因为他们调用了其他方法:

from turtle import *

tracer(False)

dot(100)  # change 'dot' to 'forward' and run again

done()

tracer(False)如果您运行上述程序,尽管调用,您仍会得到一个点。如果您将 更改为dotforward您将看到一个空白屏幕,除非您注释掉对 的调用tracer

我的经验法则update()是:

  • 不要以为有人会为你打电话

  • 不要假设你是唯一一个调用它的人

这不仅适用于 Python 乌龟。我的建议是,把你的update()电话放在你认为你需要它们的地方,否则未来的turtle更新可能会破坏你的代码。


推荐阅读