Tkinter-模块化添加图像

时间:2018-09-23 22:30:32

标签: python image user-interface tkinter modularity

我正在尝试创建一个定义,如果传入有效路径,该定义将允许我向帧中添加图像。

我读到我必须保留来自此page的图像参考

请记住,我在代码中尝试过此操作:

class tkinterHelper(Frame):

    def __init__(self, master):
        "initialize the frame"
        Frame.__init__(self, master)
        self.grid()

    def AddImage(self, Path, X, Y):
        self.Render = PhotoImage(Path)
        TKImage = Label(self, image=self.Render)
        TKImage.image = self.Render
        TKImage.place(x=X, y=Y, relwidth=1, relheight=1)
        return self.Render

if __name__ == "__main__":
    root = Tk()
    tkHelper = tkinterHelper(root)

    BackGround = tkHelper.AddImage("Images\\background.gif", 0, 0)

    root.mainloop()

我在想,如果我返回self.render,我仍然会引用该图片。

如果那不是我如何保留对图像的引用,怎么能正确引用呢?

我想保持它与原来的结构相同,因为将来我将向该应用程序添加很多图像。

谢谢!

1 个答案:

答案 0 :(得分:0)

我通过在助手类中添加名为widget_placement的def来修复代码

def widget_placement(self, widget, r, c, spacex, spacey, s):
    widget.grid(row=r, column=c, padx=spacex + 20, pady=spacey, sticky=s)

然后我让def AddImage(self, path, X, Y)仅返回TKImage

def AddImage(self, Path, X, Y):
    self.Render = PhotoImage(file=Path)
    TKImage = Label(self, image=self.Render)
    TKImage.image = self.Render
    return TKImage

最后,我将图像放在网格上。

BackGround = tkHelper.AddImage("Images\\background.gif", 100, 100)
tkHelper.widget_placement(BackGround, 0, 0, 0, 0, W)