Python Tkinter не уменьшается область скроллинга
Пишу простой ПДФ редактор по подобию https://github.com/pyGuru123/Python-Projects/tree/master/Moonlight%20PDF%20Reader
Открываю ПДФ файл, получаю изображение страницы, затем создаю полученное изображение на канвасе. Если изображение не помещается на канвас, то работают скроллбары. При увеличении масштабирования скроллбары увеличиваются. Однако при последующем уменьшении изображения скроллбары не уменьшаются.
Вот код:
from tkinter import*
from tkinter import filedialog
import fitz
class App(Frame):
def __init__(self, master):
super().__init__(master)
self.pack()
self._attributes()
self.frame_top()
self.frame_canvas()
def _attributes(self):
self.filepath = None
self.current_page = 0
self.zoom = 1
def frame_top(self):
self.frm_top = Frame(self)
self.frm_top.pack(fill=X)
self.btn_open = Button(self.frm_top,text="Открыть PDF",command=self.open_file)
self.btn_open.pack(side=RIGHT)
self.btn_zoomin = Button(self.frm_top,text="Zoom In",command=self.zoom_in)
self.btn_zoomin.pack(side=LEFT)
self.btn_zoomout = Button(self.frm_top,text="Zoom In",command=self.zoom_out)
self.btn_zoomout.pack(side=LEFT)
def frame_canvas(self):
self.frm_canvas = Frame(self)
self.frm_canvas.pack()
self.scrollx = Scrollbar(self.frm_canvas, orient=HORIZONTAL)
self.scrollx.grid(row=1,column=0,sticky='we')
self.scrolly = Scrollbar(self.frm_canvas, orient=VERTICAL)
self.scrolly.grid(row=0,column=1,sticky='ns')
self.output = Canvas(self.frm_canvas,width=700,height=700,highlightthickness=0)
self.output.configure(yscrollcommand=self.scrolly.set, xscrollcommand=self.scrollx.set)
self.output.grid(row=0,column=0)
self.scrollx.configure(command=self.output.xview)
self.scrolly.configure(command=self.output.yview)
def open_file(self):
self.filepath = filedialog.askopenfilename(title="Открыть PDF", filetypes=(("PDF","*.pdf"),))
self.frm_top.destroy()
self.frame_top()
self.frm_canvas.destroy()
self.frame_canvas()
self.update()
self.get_image()
def get_image(self):
self.img_file = self.get_page(self.filepath,self.current_page, self.zoom)
self.image_canvas = self.output.create_image(0, 0, anchor='center', image=self.img_file)
self.output.configure(scrollregion=self.output.bbox(ALL))
def get_page(self,filepath,page_num, zoom=None):
self.pdf = fitz.open(filepath)
page = self.pdf.load_page(page_num)
if zoom:
mat = fitz.Matrix(zoom, zoom)
pix = page.get_pixmap(matrix=mat)
else:
pix = page.get_pixmap()
px1 = fitz.Pixmap(pix, 0) if pix.alpha else pix
imgdata = px1.tobytes('ppm')
return PhotoImage(data=imgdata)
def zoom_in(self):
if self.zoom < 1.6:
self.zoom = round(self.zoom + 0.2, 1)
self.get_image()
def zoom_out(self):
if self.zoom > 0.6:
self.zoom = round(self.zoom - 0.2, 1)
self.get_image()
if __name__ == "__main__":
root = Tk()
myapp = App(root)
myapp.mainloop()
Если вместо self.output.configure(scrollregion=self.output.bbox(ALL)) указать self.output.configure(scrollregion=self.output.bbox(self.image_canvas)), то тогда все работает корректно.
Почему не работает с bbox(ALL)?