Я пытаюсь сделать изображение фоном моего окна 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
, и я не знаю, как их вызывать вне класса.