+6 投票
分类:其它问题 | 用户: 10 10 9 (8.6k 分)

在写project2时遇到的问题:

定义了一个用于播放gif的函数:

def xianshi():
    root = tk.Tk()
    gif = imageio.mimread('一维波动方程.gif')
    gif_tk = [ImageTk.PhotoImage(Image.fromarray(img)) for img in gif]
    def play_gif(frame):
        label.config(image=gif_tk[frame])
        root.after(50, play_gif, (frame+1)%len(gif_tk))
    label = tk.Label(root)
    label.pack()
    play_gif(0)
    tk.Button(root,text='另存为',command=print('baocun')).pack()
    root.mainloop()

当函数独立运行时,可以正常解析gif文件并播放,如下图

但是当我将这个函数与我前面所写代码里建立的一个tk窗口里的一个按钮相连时,按下按钮却会报错,如下图:

按钮的代码为tk.Button(text='查看图像',font=('Times',20,'bold'),command=xianshi)

报错显示‘_tkinter.TclError: image "pyimage1" doesn't exist’但是当我再次独立运行此函数时,却依然可以正常运行,只有在与按钮相连后,按下按钮会报错。

尝试了非常多的方法都会报这个错误,该如何解决?

1个回答

+2 投票
用户: 9 5 3 (2.5k 分)
采纳于 用户:
 
已采纳
一个程序中只能存在一个根窗口,也就是只能存在一个Tk();其他窗口只能以顶层窗口的形式出现。

将函数 xianshi 中的root=tk.Tk() 替换成 root=tk.Toplevel()可以解决;亲测有效(使用Pycharm,Python3.8.8进行的测试)。
用户: 10 10 9 (8.6k 分)
泰裤辣
用户: 10 9 5 (6.4k 分)
赞!
欢迎来到 在线问答系统 ,有什么不懂的可以尽管在这里提问,你将会收到社区其他成员的回答。
...