Python Tkinter TclError
我设计了一个可以旋转的弧线,但我无法弄清楚为什么IDLE告诉我在我的代码中仍然存在错误。Python Tkinter TclError
这里是我的代码:
from Tkinter import* from math import *
from time import sleep
pai=Tk()
cv=Canvas(pai,width=1100,height=631,bg="white")
cv.pack()
bb=(150,110,550,510)
temp1=0
temp2=24
t=0
arc1=cv.create_arc(bb,start=temp1,extent=temp2,fill="yellow")
while True:
t=0.51
temp1+=t
cv.itemconfig(arc1,start=temp1)
cv.update()
这是results:
Traceback (most recent call last): File "C:\Users\amazi\Desktop\作业\s.py", line 15, in <module>
cv.itemconfig(arc1,start=temp1)
File "C:\Python27\lib\lib-tk\Tkinter.py", line 2408, in itemconfigure
return self._configure(('itemconfigure', tagOrId), cnf, kw)
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1321, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
TclError: invalid command name ".93591304L"
回答:
在我看来,你的代码,而它的运行运行正常 - 它只是结束这也就是问题。当你关闭应用程序时,它是否给出了这个错误?
我修改了while True:
块到for i in range(500):
来验证这一点,只要你的循环不期望继续它完美关闭。
这里有两种可能的方式,你可以解决这个问题:
最简单的办法,捕获错误:
from Tkinter import* pai=Tk()
cv=Canvas(pai,width=1100,height=631,bg="white")
cv.pack()
bb=(150,110,550,510)
temp1=0
temp2=24
t=0
arc1=cv.create_arc(bb,start=temp1,extent=temp2,fill="yellow")
while True:
t=0.51
temp1+=t
try:
cv.itemconfig(arc1,start=temp1)
cv.update()
except TclError:
pass
pai.mainloop()
难的方法,不要让错误发生(给GUI第二以追上):
import Tkinter as tk def on_closing():
pai.cont = False
pai = tk.Tk()
pai.protocol("WM_DELETE_WINDOW", on_closing)
cv = tk.Canvas(pai,width=1100,height=631,bg="white")
cv.pack()
bb = (150,110,550,510)
temp1 = 0
temp2 = 24
t = 0
arc1 = cv.create_arc(bb,start=temp1,extent=temp2,fill="yellow")
pai.cont = True
while pai.cont:
t=0.51
temp1+=t
cv.itemconfig(arc1,start=temp1)
cv.update()
pai.destroy()
虽然我个人通常不建议捕捉错误,我不会去第二个选项。基本上,我在那里做的是创建一个变量,告诉while循环是否应该继续,然后当你点击关闭按钮更新时,结束。在我看来,无限while循环是主要问题。一旦它结束,图形用户界面可以完成,这一切都可以实现。
回答:
我相信你会得到这个错误,因为你试图访问小部件,而没有,类似于this question。当您使用x按钮关闭应用程序时,while True
循环尝试在不存在的小部件上至少运行一次,从而产生错误。如果通过关闭命令提示符关闭应用程序,则不会产生错误,因为它出现在哪里?试试下面的例子是动画正是你想要的方式,但没有一个while True
循环,这是不容易沿Tkinter的使用反正:
import tkinter as tk root = tk.Tk()
cv = tk.Canvas(root, width=1100, height=631, bg='white')
cv.pack()
bb = (150,110,550,510)
temp1 = 0
temp2 = 24
arc1=cv.create_arc(bb, start=temp1, extent=temp2, fill='yellow')
def rotate():
global temp1
t = 0.51
temp1 = (temp1 + t) % 360
print(temp1)
cv.itemconfig(arc1,start=temp1)
cv.update_idletasks()
cv.after(0, rotate)
cv.after(0, rotate)
root.mainloop()
使用下面的另一个例子Bryan的建议可能会产生。您可以需要在下面的例子中调整t
虽然:
import tkinter as tk root = tk.Tk()
cv = tk.Canvas(root, width=1100, height=631, bg='white')
cv.pack()
bb = (150,110,550,510)
temp1 = 0
temp2 = 24
arc1=cv.create_arc(bb, start=temp1, extent=temp2, fill='yellow')
def rotate():
global temp1
t = 1
temp1 = (temp1 + t) % 360
print(temp1)
cv.itemconfig(arc1,start=temp1)
cv.after(1, rotate)
rotate()
root.mainloop()
以上是 Python Tkinter TclError 的全部内容, 来源链接: utcz.com/qa/261407.html