Python Tkinter:当我在课堂上编写时,画布中的图像无法正确显示

时间:2015-07-05 07:55:22

标签: python tkinter

我是新手python用户。 今天我想得到一个网站的验证码,并在我的GUI上显示但遇到问题。 在这段代码中,我在画布的位置上什么都得不到,但标签和按钮可以正确显示:

class Application():
def __init__(self):
    self.root = Tkinter.Tk()
    self.createWidgets()
def createWidgets(self):
    label = Label(self.root,text='Input this Checkcode')
    label.pack() #show correctly
    canvas = Tkinter.Canvas(self.root,width = 500)
    response = urllib2.urlopen('http://xxx/ValidateCode')
    image = Image.open(StringIO(response.read()))
    im = ImageTk.PhotoImage(image)
    canvas.create_image(300,50,image = im)
    canvas.pack() # no image
    quitButton = Button(self.root,text='Quit',command=self.root.quit)
    quitButton.pack() #show correctly
if __name__ == '__main__':
app = Application()
app.root.mainloop()

但是在这个中我获得了预期的结果,唯一的区别是在 main 中编写GUI而不是另一个类:

if __name__ == '__main__':
root = Tkinter.Tk()
response = urllib2.urlopen('http://xxx/ValidateCode')
image = Image.open(StringIO(response.read()))
label = Label(root,text='Input this Checkcode')
label.pack() # show correctly
canvas = Tkinter.Canvas(root,width = 500)
im = ImageTk.PhotoImage(image)
canvas.create_image(300,50,image = im)
canvas.pack() # show correctly
quitButton = Button(root,text='Quit',command=root.quit)
quitButton.pack() # show correctly
root.mainloop()

这是为什么?我真的很困惑......谢谢。

1 个答案:

答案 0 :(得分:1)

将您的Canvas和其他GUI元素转换为Application的实例变量,如self.canvasself.label等。否则当您离开{{1}时,它们将超出范围}。 main 示例有效的原因是因为调用createWidgets时所有变量仍在范围内。