gpt4 book ai didi

python - 在 Python 中清除窗口中的图形

转载 作者:行者123 更新时间:2023-12-01 04:49:37 26 4
gpt4 key购买 nike

所以我试图制作一个定时循环,其中不同的文本命令出现在屏幕上,并且用户必须按下与文本命令相对应的键。问题是,由于文本居中,它只会覆盖自身,直到命令不可读。有没有办法可以在每次我想在窗口上绘制文本时清除窗口?我在下面发布了我当前的代码

from Graphics import *
from Myro import timer #used for the animation.
import random #random starting positions and speeds

NUMBALLS = 10
WINSIZE = 500
done = 0
win = Window("GAME", WINSIZE, WINSIZE)
#win.mode = "manual" #Trick to make the animation smoother....

space = Text((180, 250), "SPACEBAR")
space.fill = Color("blue")
space.fontSize = 30
space.xJustification = "bottom"
space.yJustification = "bottom"

up = Text((180, 250), "UP")
up.fill = Color("red")
up.fontSize = 30
up.xJustification = "bottom"
up.yJustification = "bottom"

down = Text((180, 250), "DOWN")
down.fill = Color("black")
down.fontSize = 30
down.xJustification = "bottom"
down.yJustification = "bottom"

left = Text((180, 250), "LEFT")
left.fill = Color("green")
left.fontSize = 30
left.xJustification = "bottom"
left.yJustification = "bottom"

right = Text((180, 250), "RIGHT")
right.fill = Color("orange")
right.fontSize = 30
right.xJustification = "bottom"
right.yJustification = "bottom"

shape = Rectangle((0, 500), (500, 0))
shape.fill = Color("white")


keys = (space,up,left,right,down)

def handleKeyPress(win, event):
global done
if ((this == 0) and (done == 0)):
if (event.key == "space"):
print("correct")
done = 1
if ((this == 1) and (done == 0)):
if (event.key == "Up"):
print("correct")
done = 1
#if ((this == 2) and (done == 0)):
# if (event.key == "Left"):
# print("correct")
# done = 1
#if ((this == 3) and (done == 0)):
# if (event.key == "Right"):
# print("correct")
done = 1
# if ((this == 4) and (done == 0)):
# if (event.key == "Down"):
# print("correct")
# done = 1


for i in timer(5):
shape.draw(win)
this = random.randint(0,4)
me = keys[this]
me.draw(win)
onKeyPress(handleKeyPress)
print("done")

wait(0.4)
done = 0

最佳答案

编辑:显然,您使用的是 Calico 图形,它是基于 IronPython 而不是 Cython 构建的,并且无法访问 tkinter 绑定(bind)。底层实现是 Gtk,而不是 tkinter,如果您想扩展功能,那就应该去看看(尽管它看起来完全足够了)。我相信,在这种情况下,简短的答案是 window.clear()。

<小时/>

据我所知,“Graphics”不是标准的 Python 包。我在 Python 2 和 3 上遇到导入错误。但是,我相信“Zelle”图形是一个非常标准的 Python 学习库,而且你看起来像是正在学习,所以我猜测 Graphics == Zelle Graphics

也就是说,我会比特定的包更笼统地回答这个问题,因为规范的 Python 中并未真正使用该包。

Graphics 构建于 tkinter 之上,tkinter 是 Python 和 tk 之间非常强大的低级接口(interface)。 Graphics Canvas 实际上是一个 tkinter Canvas 实例。

这是关于 tkinter Canvas 对象的 effbot 文档:

http://effbot.org/tkinterbook/canvas.htm

它非常清晰且易于使用 - 您会注意到有

my_canvas.delete('all')
my_canvas.create_text(0,0,text='whatever')

解决您的问题。

去Zelle图形的源代码,很简单,看看 Canvas 隐藏在哪里。然后直接调用方法就可以了。它将为您提供更强大的功能并成为更具可扩展性的解决方案,并且使您能够轻松转向更强大的工具!

这是 Zelle 图形的代码:

http://mcsp.wartburg.edu/zelle/python/graphics.py

您会注意到所有 Graphics 实例都有对“self.canvas”的引用。它甚至没有隐藏(这将在变量名称上用“__”前缀表示),因此您可以直接访问 Canvas 来执行您想要的任何操作。为了获得最简单的解决方案,我们可能会注意到,您也可以只在单个文本对象上使用“setText”,而不是制作多个相互替换的文本对象。

关于python - 在 Python 中清除窗口中的图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28733368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com