使用带有滚动框架的后记方法的问题

时间:2019-07-31 07:31:14

标签: python-3.x canvas tkinter python-imaging-library

我使用@furas(使用画布)编写的result_list类创建了一个杂色帧。 我想将创建的画布保存为图像。因此,我尝试使用滚动帧的canvas属性的postscript方法,即ScrolledFrame(其中sf._canvas)。但是我得到了错误:sf=ScrolledFrame(tk.Tk())。追溯是

TclError: invalid command name ".!scrolledframe.!canvas"

使用的代码是:

Traceback (most recent call last):

  File "<ipython-input-20-7da2d37c56af>", line 1, in <module>
    runfile('C:/Users/Ing/Desktop/EN/stage/rapports/codes rev/test_affichage.py', wdir='C:/Users/Ing/Desktop/EN/stage/rapports/codes rev')

  File "C:\Users\Ing\Documents\anaaconda\lib\site-packages\spyder\utils\site\sitecustomize.py", line 710, in runfile
    execfile(filename, namespace)

  File "C:\Users\Ing\Documents\anaaconda\lib\site-packages\spyder\utils\site\sitecustomize.py", line 101, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/Ing/Desktop/EN/stage/rapports/codes rev/test_affichage.py", line 111, in <module>
    ps=sf._canvas.postscript(file=input, colormode='color')

  File "C:\Users\Ing\Documents\anaaconda\lib\tkinter\__init__.py", line 2592, in postscript
    self._options(cnf, kw))

TclError: invalid command name ".!scrolledframe.!canvas"

1 个答案:

答案 0 :(得分:0)

通过将root.mainloop()放在grid_function中,该函数直到窗口被销毁后才返回。然后,您尝试在窗口小部件上调用方法,但是该窗口小部件不再存在。无论您使用的是ScrolledFrame类还是其他类都是无关紧要的。问题是您要在销毁小部件后尝试访问它们。

您需要重新排列代码,以便在销毁主窗口之前而不是之后调用self._canvas.postscript