我有一个大问题。画布加载完美但图像不显示。
我在1周前开始使用Python,但我不知道为什么不起作用。任何人都可以告诉我如何解决未在画布上加载图像的问题吗?
from Tkinter import *
from PIL import ImageTk
from PIL import Image
class Fake_Virus:
def __init__(self, master):
self.master = master
master.title("Totally not a virus!")
b = Button(master, text="Help", command=self.prank)
b.pack(padx=10, pady=10, side=LEFT)
quit = Button(master, text="Close", command=self.close_window)
quit.pack(padx=10, pady=10, side=RIGHT)
photo = PhotoImage("eh.gif")
label = Label(image=photo)
label.image = photo # keep a reference!
label.pack()
f = Frame(master, height=150, width=150)
f.pack_propagate(0) # don't shrink
f.pack()
def prank(self):
print "work"
return
def close_window(self):
root.destroy()
return
root = Tk()
my_gui = Fake_Virus(root)
root.mainloop()
答案 0 :(得分:2)
您应该使用file
选项初始化照片图像对象
这意味着您需要将photo = PhotoImage("eh.gif")
更改为photo = PhotoImage(file="eh.gif")
现在您的代码将正常运行。但是工作代码不一定是好代码。您的代码还有其他问题。让我快点介绍一下:
import Tkinter as Tk
编码为from Tkinter import *
self.master = master
(阅读complete code知道原因)但是你从未使用它。这意味着你做出了一个很好的决定而且你没有用它。__init__()
会变脏。prank()
和close_window()
中使用退货?默认情况下,不返回某些内容的Python函数无论如何都返回None
,因此对它进行编码是没用的。Tkinter.Tk()
鉴于这些评论,我想为您提供一个改进但不完美的程序版本。然后,您可以按照此“哲学”添加或修改现有小部件:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import Tkinter as Tk
from PIL import ImageTk
class FakeVirus:
def __init__(self, master):
self.master = master
self.configure_gui()
self.create_widgets()
def configure_gui(self):
self.master.title('Totally not a virus!')
def create_widgets(self):
self.create_buttons()
self.create_label_for_image()
def create_buttons(self):
self.help = Tk.Button(self.master, text='Help', command=self.prank)
self.help.pack(side=Tk.LEFT)
self.quit = Tk.Button(self.master, text='Close', command=self.close_window)
self.quit.pack(side=Tk.LEFT)
def create_label_for_image(self):
self.image_label = Tk.Label(self.master)
self.image_label.pack(side=Tk.LEFT)
self.load_image_to_label()
def load_image_to_label(self):
self.photo = ImageTk.PhotoImage(file='eh.gif')
self.image_label.image = self.photo
self.image_label.config(image=self.photo)
def prank(self):
print "work"
def close_window(self):
root.destroy()
if __name__ == '__main__':
root = Tk.Tk()
my_gui = FakeVirus(root)
root.mainloop()
上述程序的输出是: