2017-10-07 125 views
-1

嗯,我想在b類中使用create_image,但它不起作用,並且當我關閉python 3程序時,它顯示如下錯誤:_tkinter .TclError:無效的命令名稱「.51752240」_tkinter.TclError:無效的命令名「.9284912」

import tkinter 
class GUI: 
    root=tkinter.Tk() 
    def __init__(self): 

     self.canvas = tkinter.Canvas(self.root, width=1024, height=960, bg="White") 
     self.canvas.pack() 

     self.t=tkinter.PhotoImage(file='hj.jpg') 
     # self.canvas.create_image(100,100,image=self.t) 
     self.root.mainloop() 
    def draw(self,x,y): 
     self.canvas.create_image(x,y,image=self.t) 
class b: 
    def __init__(self): 
     G=GUI() 
     G.draw(100,200) 
b() 

感謝任何人誰可以回覆和幫助!

+0

我不認爲'PhotoImage'支持JPG嗎?另外,'self.root'沒有被定義。無論是在任何地方更改爲'root',或將'root = tkinter.Tk()'更改爲'self.root = tkinter.Tk()' – saulspatz

+0

非常感謝,我再試一次,它不支持JPG.Maybe我改變了它的擴展名在某處。但我認爲使用root的代碼被定義爲self.root。 –

回答

2

當您初次運行該程序時,只有b.__init__()的第一行被執行;該函數包含形式爲self.root.mainloop()的無限循環。一旦關閉了窗口,主循環最終會退出,並且執行繼續到G.draw()--由於您試圖繪製的畫布不再存在,所以失敗。您需要將mainloop()調用移至代碼中的稍後一點 - 可能是b.__init__()或文件最後的頂層。

+0

非常感謝。它的工作原理! –