Как определить поведение основного цикла для холста? - PullRequest
0 голосов
/ 20 июня 2019

Я не могу обернуть голову, что не так в этом подходе.

Если вы запустите этот код, появится холст с черным экраном, и если я раскомментирую app.mainloop() в классе Screen, тогдаПоявляется холст с изображением (что и ожидается).

Единственное, что отличается в этих двух сценариях, это то, с чего я запускаю основной цикл в классе Application или в подклассе.Я что-то упустил?

import tkinter

from PIL import Image, ImageTk


class Screen:
    def __init__(self, app):
        self.width, self.height = app.winfo_screenwidth()//2, app.winfo_screenheight()//2
        app.geometry("%dx%d+0+0" % (self.width, self.height))

        app.bind("<Escape>", lambda x: (x.widget.withdraw(), x.widget.quit()))

        self.canvas = tkinter.Canvas(app, width=self.width, height=self.height)
        self.canvas.pack()
        self.canvas.configure(background="black")

        image = Image.open("<IMAGE_PATH>")
        resized_image = self.resize_image(image)
        resized_image = ImageTk.PhotoImage(resized_image)
        _ = self.canvas.create_image(self.width / 2, self.height / 2, image=resized_image)
        # app.mainloop()

    def resize_image(self, image):
        width, height = image.size
        ratio = min(self.width / width, self.height / height)
        width = int(width * ratio)
        height = int(height * ratio)
        return image.resize((width, height), Image.ANTIALIAS)


class Application(tkinter.Tk):
    def __init__(self):
        tkinter.Tk.__init__(self)
        self.screen_widget = Screen(self)
        print('running')
        self.mainloop()


if __name__ == "__main__":
    Application()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...