如何解决通过 tkinter 中的按钮关闭后再次调用海龟窗口时出错
import tkinter
from tkinter import *
from turtlefunc import *
root = Tk()
#creating a button
myButton = Button(root,text="call turtle",command =call)
myButton.pack()
root.mainloop()
以下代码为海龟窗口
import turtle
def call():
t = turtle.Turtle()
screen = turtle.Screen()
screen.bgcolor('white')
t.width(3)
for i in range(1,5):
t.forward(20)
t.left(90)
t.hideturtle()
turtle.exitonclick()
错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\sharmila\AppData\Local\Programs\Python\python38\lib\tkinter\__init__.py",line 1883,in __call__
return self.func(*args)
File "C:\Users\sharmila\PycharmProjects\GAME ARCADE GUI\turtlefunc.py",line 3,in call
t = turtle.Turtle()
File "C:\Users\sharmila\AppData\Local\Programs\Python\python38\lib\turtle.py",line 3813,in __init__
RawTurtle.__init__(self,Turtle._screen,File "C:\Users\sharmila\AppData\Local\Programs\Python\python38\lib\turtle.py",line 2557,in __init__
self._update()
File "C:\Users\sharmila\AppData\Local\Programs\Python\python38\lib\turtle.py",line 2660,in _update
self._update_data()
File "C:\Users\sharmila\AppData\Local\Programs\Python\python38\lib\turtle.py",line 2646,in _update_data
self.screen._incrementudc()
File "C:\Users\sharmila\AppData\Local\Programs\Python\python38\lib\turtle.py",line 1292,in _incrementudc
raise Terminator
turtle.Terminator
解决方法
您必须在销毁画布之前.clear()
,因此所有海龟都不在等式之外。这样,当它不再看到 Terminator
TurtleScreen._RUNNING
#! /usr/bin/python3
import tkinter as tk
import turtle as trt
title = 'Python Turtle'
root = tk .Tk() ; root .title( title )
Width,Height = 500,500
myButton = None ## empty,forward declaration
def call():
myButton .pack_forget() ## hide button
canvas = tk .Canvas( root,width=Width,height=Height )
canvas .pack() ## show canvas
turtle = trt .RawTurtle( canvas=canvas )
screen = turtle .getscreen()
screen .bgcolor('white')
turtle .width( 3 )
for i in range( 1,5 ):
turtle .forward( 20 )
turtle .left( 90 )
turtle .hideturtle()
def dest( x,y ):
screen .clear() ## destroy turtles
canvas .destroy()
myButton .pack() ## show button again
screen .onclick( dest )
## creating a button
myButton = tk .Button( root,text='call turtle',width=len(title) +10,command=call )
myButton .pack()
root .mainloop()
不过,您真的不需要每次都“破坏”画布并重建它。您可以在不使用时“隐藏”它。
#! /usr/bin/python3
import tkinter as tk
import turtle as trt
title = 'Python Turtle'
root = tk .Tk() ; root .title( title )
Width,500
canvas = tk .Canvas( root,height=Height )
myButton = None ## empty,forward declaration
def call():
myButton .pack_forget() ## hide button
canvas .pack() ## show canvas
turtle = trt .RawTurtle( canvas=canvas )
screen = turtle .getscreen()
screen .bgcolor('white')
turtle .width( 3 )
for i in range( 1,y ):
screen .clear() ## destroy turtles
canvas .pack_forget() ## hide canvas,so you can reuse it later
myButton .pack() ## show button again
screen .onclick( dest )
## creating a button
myButton = tk .Button( root,command=call )
myButton .pack()
root .mainloop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。