我在屏幕上随机生成数字.当我点击任何圆形时,我想让屏幕清空.如何在单击圆形时绑定事件?我试了onclick()clearscreen(),但不起作用. 我的代码是:

# -*- coding: utf-8 -*-
import random
import turtle
class Figure:
    def __init__(self):
        __colors = ['red', 'green', 'yellow', 'purple', 'orange']
        __figures = ['square', 'circle', 'triangle']
        self.__x = random.randint(-330, 330)
        self.__y = random.randint(-230, 230)
        self.__color = random.choice(__colors)
        self.t = turtle.Turtle()
        self.t.hideturtle()
        self.t.fillcolor(self.__color)
        self.t.up()
        self.t.setpos(self.__x, self.__y)
        self.t.down()
        __choose = random.choice(__figures)
        if __choose == 'square':
            self.square()
        elif __choose == 'circle':
            self.circle()
        else:
            self.triangle()


    def square(self):
        self.t.begin_fill()
        for i in range(4):
            self.t.fd(50)
            self.t.left(90)
        self.t.end_fill()


    def circle(self):
        self.t.begin_fill()
        self.t.circle(50)
        self.t.end_fill()
        self.t.onclick(self.delete_figures)
        
    def triangle(self):
        self.t.begin_fill()
        self.t.fd(50)
        self.t.lt(120)
        self.t.fd(50)
        self.t.lt(120)
        self.t.fd(50)
        self.t.end_fill()

    def delete_figures(self, x ,y):
        turtle.clearscreen()



turtle.tracer(1, 0)

for i in range(10):
    Figure()


turtle.mainloop()

当我点击任何圆形时,我想让屏幕清空.如何在单击圆形时绑定事件?

推荐答案

onclick不会在 turtle 绘制的图画上注册点击监听器,只在 turtle 本身上注册.但这些 turtle 是隐藏的,即使看得见,也只有几个像素大,所以没有什么可点击的.

有两个主要选项:

  1. 保持乌龟的画图不变,并添加一个屏幕点击监听器.在单击处理程序中,循环遍历所有圆,并确定单击的x/y位置是否发生在任何圆的半径内.下面是一个例子:

    import random
    import turtle
    
    
    class Figure:
        def __init__(self):
            __colors = ['red', 'green', 'yellow', 'purple', 'orange']
            __figures = ['square', 'circle', 'triangle']
            self.__x = random.randint(-330, 330)
            self.__y = random.randint(-230, 230)
            self.__color = random.choice(__colors)
            self.t = turtle.Turtle()
            self.t.hideturtle()
            self.t.fillcolor(self.__color)
            self.t.up()
            self.t.setpos(self.__x, self.__y)
            self.t.down()
            self.shape = random.choice(__figures)
    
            if self.shape == 'square':
                self.square()
            elif self.shape == 'circle':
                self.circle()
            else:
                self.triangle()
    
        def square(self):
            self.t.begin_fill()
    
            for i in range(4):
                self.t.fd(50)
                self.t.left(90)
    
            self.t.end_fill()
    
        def circle(self):
            self.t.begin_fill()
            self.t.circle(50)
            self.t.end_fill()
            self.t.right(90)
            self.t.forward(-50)
    
        def triangle(self):
            self.t.begin_fill()
            self.t.fd(50)
            self.t.lt(120)
            self.t.fd(50)
            self.t.lt(120)
            self.t.fd(50)
            self.t.end_fill()
    
        def is_touching(self, x, y):
            return self.shape == 'circle' and self.t.distance(x, y) < 50
    
    
    turtle.tracer(1, 0)
    figures = []
    
    for i in range(10):
        figures.append(Figure())
    
    def test_circle_click(x, y):
        for f in figures:
            if f.is_touching(x, y):
                turtle.clearscreen()
    
    turtle.onscreenclick(test_circle_click)
    turtle.mainloop()
    
  2. 不是画圆,而是使用turtle.shape("circle")turtle.color()使乌龟看起来像一个圆.不要隐藏 turtle ,让它可以使用您当前的处理程序点击.Here's an example(和an answer in this thread from the author of that other post).

Python相关问答推荐

两个pandas的平均值按元素的结果串接元素.为什么?

删除字符串中第一次出现单词后的所有内容

如何将多进程池声明为变量并将其导入到另一个Python文件

Pandas DataFrame中行之间的差异

为什么if2/if3会提供两种不同的输出?

重置PD帧中的值

导入错误:无法导入名称';操作';

Pandas:填充行并删除重复项,但保留不同的值

Python—为什么我的代码返回一个TypeError

如何按row_id/row_number过滤数据帧

无法在Spyder上的Pandas中将本地CSV转换为数据帧

按条件添加小计列

我什么时候应该使用帆布和标签?

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

PYTHON中的selenium不会打开 chromium URL

在Pandas 中以十六进制显示/打印列?

是否将Pandas 数据帧标题/标题以纯文本格式转换为字符串输出?

使用Scikit的ValueError-了解

使用pytest测试是否缺少导入

S最大值除以最小值,然后减1的结果是什么?