不知道对此有何评论。但是,没关系,我自己解决了。
花了一段时间才发现Python真的很草率,当你完全破坏这个过程时会让计时器继续运行。过了一会儿,当它从计时器出来时你会爆炸,无处可去。这是一件非常基本的事情。你在毁灭行动中自己清理干净。 Python没有。
我能够在保持主窗口运行的同时打开和关闭我的顶层窗口,但是当我关闭子窗口时,我收到一条大而神秘的错误消息。当我通过X或子窗口中的已定义按钮关闭它时,会发生这种情况。如果我注释掉计时器事件(self.ater),则不会出现错误消息。但我必须要更新表格。
下一个计时器弹出时出现错误消息。它没有被破坏和流行,但是无处可去。
我无法使错误消息显示正确。尽我所能。
这是错误消息块,然后是创建和关闭子窗口的代码。
Tkinter回调中的异常
追踪(最近一次呼叫最后一次):
文件" /usr/lib/python3.4/tkinter/ init .py",第1536行,致电 return self.func(* args)
文件" /usr/lib/python3.4/tkinter/ init .py",第585行,在callit中 FUNC(*参数)
文件" / home / pi / IltiShares / @Mikes文件/ @Python3源/ GPS数据显示11-02-2016.py",第630行,在UpdateSky中 t_canvas.itemconfig(zz,text = str(self.counter))
文件" /usr/lib/python3.4/tkinter/ init .py",第2419行,在itemconfigure中 return self._configure((' itemconfigure',tagOrId),cnf,kw)
文件" /usr/lib/python3.4/tkinter/ init .py",第1313行,在_configure中 self.tk.call(_flatten((self._w,cmd))+ self._options(cnf)) _tkinter.TclError:无效的命令名称" .1959370864.1959118928.1959118192.1959118800"
def ShowSky(self):
global t_canvas
global zz
fontsize = 8
labelwidth = 15
textwidth = 17
self.counter += 1
t = Toplevel(self)
t.wm_title("Sky Map or SV's")
frame2 = Frame(t)
frame2.config(height = 400, width = 400) # These are pixels
frame2.config(relief = RIDGE)
frame2.pack(side = LEFT, anchor= 'ne')
t_canvas = Canvas(frame2, height = 300, width = 300, borderwidth = 2,
bg= '#b3ffff', relief = GROOVE)
t_canvas.pack()
self.waiting = StringVar()
self.waiting.set('.')
zz = t_canvas.create_text(50, 50, text = '01')
Button(frame2, text='Close', width = 10, bg = '#FFc0c0', command=t.destroy).pack()
self.after(1000, self.UpdateSky)
pass
def UpdateSky(self):
global t_canvas
global zz
self.counter += 1
# Test movement and text change.
t_canvas.itemconfig(zz, text=str(self.counter))
t_canvas.coords(zz,self.counter,60)
self.after(8000, self.UpdateSky)
pass