Как автоматически увеличить мое изображение, используя PhotoImage.zoom (x, y)? - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь сделать изображение фоном моего окна Tkinter.

Проблема в том, что, хотя холст динамически изменяется, мое изображение - нет.

Я пытался увеличить его в соответствии с соотношением new_dimension / old_dimension.

class ResizingCanvas(Canvas):
    def __init__(self,parent,**kwargs):
        Canvas.__init__(self,parent,**kwargs)
        self.bind("<Configure>", self.on_resize)
        self.height = self.winfo_reqheight()
        self.width = self.winfo_reqwidth()

    def on_resize(self,event):
        # determine the ratio of old width/height to new width/height
        wscale = float(event.width)/self.width
        hscale = float(event.height)/self.height
        self.width = event.width
        self.height = event.height
        # resize the canvas 
        self.config(width=self.width, height=self.height)
        # rescale all the objects tagged with the "all" tag
        self.scale("all",0,0,wscale,hscale)

def main():
    root = Tk()
    myframe = Frame(root)
    myframe.pack(fill=BOTH, expand=YES)
    mycanvas = ResizingCanvas(myframe,width=850, height=400, bg="red", 
highlightthickness=0)
    mycanvas.pack(fill=BOTH, expand=YES)

    # add some widgets to the canvas
    image = PhotoImage(file="bgnnn.png").zoom(wscale, hscale)
    mycanvas.create_image(600, 390, image=image)

    # tag all of the drawn widgets
    mycanvas.addtag_all("all")
    root.mainloop()

if __name__ == "__main__":
    main()

Я получаю эту ошибку:

image = PhotoImage(file="bgnnn.png").zoom(wscale, hscale) NameError: name 'wscale' is not defined

Я думаю, это потому, что wscale и hscale являются локальными переменными в классе ResizingCanvas, и я не знаю, как их вызывать вне класса.

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