![](/img/trans.png)
[英]How can I get a better quality image with python tkinter canvas?
[英]I can't get an image to load on the canvas in Tkinter python
我有一个大问题。 画布可以完美加载,但不会显示图像。
我是在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()
您应该使用file
选项初始化照片图像对象。
这意味着您需要将photo = PhotoImage("eh.gif")
更改为photo = PhotoImage(file="eh.gif")
现在您的代码可以使用了。 但是,有效的代码不一定是好的代码。 您的代码还有其他问题。 让我快速浏览一下它们:
import Tkinter as Tk
编码import Tkinter as Tk
不是from Tkinter import *
self.master = master
(阅读完整的代码以了解原因),但是您从未使用过它。 这意味着您做出了一个明智的决定,并使它变得毫无用处。 __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()
上面程序的输出是:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.