【问题标题】:Turtle python resetting screen and displaying new data on user promptTurtle python 重置屏幕并在用户提示上显示新数据
【发布时间】:2021-11-10 09:34:26
【问题描述】:

我对 python turtle 比较陌生,并且正在尝试。我正在尝试根据用户提供的方程式为某些运动绘制位移角图。我计划将所有内容存储到一个数据文件中,这样我就可以在不更改 python 读取的文件目录的情况下继续添加新数据。我决定将每组数据编译成一个列表项,并通过for循环运行整个程序,逐组读取数据。例如,读取 set1 的数据、绘制图形并提示用户输入以重置海龟屏幕并读取 set2 的数据...

但是,我被困在最后一部分,在为第一个数据集绘制图表后,用户需要提示(在海龟屏幕上左键单击)退出屏幕/清除屏幕并绘制新的数据集。我试过 turtle.clearscreen() 和 turtle.exitonclick() 但它总是给我一个 turtle.Terminator 错误`

canvas = turtle.Screen()
for item in fulldatalist:   
   **filter and check valid data #assume valid data in this case)

   turtle.setworldcoordinates(llx,lly,urx,ury) #the 4 values are based on the data input

   **code for drawing of graph

   canvas.exitonclick()

这是我当前使用的代码(**是其他部分的伪代码)但它给了我一个错误:_tkinter.TclError: invalid command name ".!canvas"。

我只收到在绘制第一张图之后提到的所有错误,并且用户点击屏幕。当我只使用 1 个数据集时,用于绘制图形的代码部分有效。

感谢任何帮助 :) Tysm!

编辑: 我稍微改了一下,现在看起来像这样

for item in fulldatalist:   
   canvas = turtle.Screen()
   **filter and check valid data #assume valid data in this case)

   turtle.setworldcoordinates(llx,lly,urx,ury) #the 4 values are based on the data input

   **code for drawing of graph

   done = input('enter to proceed with next data set')
   canvas.resetscreen()

这很好用,但是我意识到它非常不方便,因为用户必须返回终端并按 Enter 键才能移动到下一个数据集。是否可以使用 exitonclick 或任何允许关闭窗口/单击窗口移动到下一个数据集的功能?

【问题讨论】:

    标签: python turtle-graphics python-turtle


    【解决方案1】:

    您似乎对canvas.exitonclick() 有两个误解。首先,它不会停止并等待点击发生,它只是注册一些代码以在点击发生时运行。其次,名字中的exit意思是“拆掉海龟系统,退出mainloop()”。不是你想要的。

    我可以想象这样做:

    def present_data():
        screen.onclick(None)  # disable handler inside handler
    
        item = fulldatalist.pop()
    
        screen.resetscreen()
    
        # filter and check valid data #assume valid data in this case)
    
        screen.setworldcoordinates(llx, lly, urx, ury)
    
        # code for drawing of graph
    
        if fulldatalist:
            screen.onclick(present_data)  # reenable handler
    
    screen = turtle.Screen()
    
    present_data()
    

    但没有使用完整的代码,我无法对此进行测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 2020-11-11
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      相关资源
      最近更新 更多