我正在尝试在我的一个Frame-Widgets中添加一个PhotoImage()。 似乎有一个问题,因为图片的图形只是赢了。
以下代码:
from urllib import urlopen
import Tkinter
from Tkinter import *
class frames(object):
pictures = {"path": "c:/users/xxxxx/desktop/source/pics/",
'google': 'google.gif',
'wiki': 'wikipedia.gif',
'tyda': 'tyda.gif',
"hitta": "hitta.gif"
}
def __init__(self, parent):
#Creation of main frames
self.parent = parent
self.logo_frame = Frame(parent)
self.input_frame = Frame(parent)
self.output_frame = Frame(parent)
def configure(self):
#root window
self.parent.geometry('400x400')
self.parent.title('w0rksuite')
self.parent.configure(bg='grey')
################################################################
#geometry logo_frame
self.logo_frame.configure(bg='white', width=385, height=45)
self.logo_frame.grid(column=0, row=0, padx=6, pady=4)
################################################################
#geometry input_frame
self.input_frame.configure(bg='white', width=385, height=45)
self.input_frame.grid(column=0, row=1, padx=6, pady=4)
################################################################
#geometry output_frame
self.output_frame.configure(bg='white', width=385, height=280)
self.output_frame.grid(column=0, row=2, padx=6, pady=4)
################################################################
def frame_objects(self):
#INPUT ENTRY
input_entry = Entry(self.input_frame, width=55)
input_entry.grid(column=0, row=1)
#INPUT TEXT
input_text = Label(self.input_frame, text='Search:')
input_text.grid(column=0, row=0, sticky=W)
input_button = Button(self.input_frame, text='Find')
#input_button.configure(height=)
input_button.grid(column=2, row=1, padx=3, pady=0)
#IMAGE OBJECTS
hitta_pic = PhotoImage(file=frames.pictures['path']+frames.pictures['hitta'])
hitta_button = Button(self.logo_frame, image=hitta_pic)
hitta_button.grid(column=0, row=0, sticky=W)
#Initiate Windows#############
root = Tk()
master_frames = frames(root)
master_frames.configure()
master_frames.frame_objects()
root.mainloop()
##############################
我的粗体文字是我如何制作PhotoImage并将其连接到我的框架。 出现按钮,但图片没有图形。
如果我在单独的python文件中执行此操作只是为了尝试该功能,无论是否可以将按钮图像添加到帧中,它都可以工作,图片显示。
有关为什么grapgics不会显示的任何想法?
(示例测试工作原理): 导入Tkinter 来自Tkinter import *
root = Tk()
frame = Frame(root)
image = PhotoImage(file='c:/users/xxxxxxx/desktop/source/pics/hitta.gif')
button = Button(frame, image=image)
button.pack()
frame.pack()
root.mainloop()
答案 0 :(得分:2)
实际上,你回答了自己,但在问题的最后放了一段代码,告诉我们它的工作原理:
root = Tk()
frame = Frame(root)
image = PhotoImage(file='c:/users/xxxxxxx/desktop/source/pics/hitta.gif')
button = Button(frame, image=image)
button.pack()
frame.pack()
root.mainloop()
此处image
对象不会被销毁并保留在内存中,因此您始终可以引用它并仍然拥有其数据,但是在您创建的frame_objects(self)
的{{1}}方法中对象:
frames(object)
每次从hitta_pic = PhotoImage(file=frames.pictures['path']+frames.pictures['hitta'])
返回时,此对象都会被销毁,因此您不会显示任何内容,
一种解决方法是使这个对象成为类frame_objects(self)
的属性,这样:
frames(object)
但无论何时需要引用此对象,都必须这样做:
self.hitta_pic = PhotoImage(file=frames.pictures['path']+frames.pictures['hitta'])