Создание изображений фона на холсте, TKinter - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь сделать фон моего приложения TKinter изображением.Код работает абсолютно нормально, прежде чем я поместил его в его метод и класс.

import tkinter as tk
from tkinter import *
from PIL import ImageTk,Image

class simpleapp_tk(tk.Tk):
    def __init__(self,parent):
        tk.Tk.__init__(self,parent)
        self.parent = parent  #makes self.parent the parent
        self.Background()


    def Background(self):
        canvas = Canvas(self, width = 0, height = 0)
        canvas.pack(expand = YES, fill = BOTH)
        img = Image.open("watercoffee.jpg")
        photo = ImageTk.PhotoImage(img)
        canvas.create_image(0, 0, anchor=NW, image = photo)

if __name__ == "__main__":   #runs code
    app = simpleapp_tk(None)
    app.wm_geometry("625x390") # window size fed into app
    app.title('My Application')
    app.mainloop()

Что мне не хватает?

1 Ответ

0 голосов
/ 20 января 2019

См. Мои комментарии, обозначенные ## в исправленном коде ниже.

import tkinter as tk
#from tkinter import * ## Why r u importing tkinter twice? Redundant.
from PIL import ImageTk,Image

class simpleapp_tk(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        #self.parent = parent  #makes self.parent the parent ## Tk is the top most widget, it does not have a parent/master
        self.Background()


    def Background(self):
        self.canvas = tk.Canvas(self, width=0, height=0) #Why use width=0 & height=0? Redundant.
        self.canvas.pack(expand='yes', fill='both')
        img = Image.open("watercoffee.jpg")
        self.photo = ImageTk.PhotoImage(img) ##images needs to be an attribute in a class. See 2nd comment in your question for explanation. 
        self.canvas.create_image(0, 0, anchor='nw', image=self.photo)  ##use self.photo

if __name__ == "__main__":   #runs code
    app = simpleapp_tk() ##removed None
    app.wm_geometry("625x390") # window size fed into app
    app.title('My Application')
    app.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...