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

回到顶部