Scrollbar does not work in Canvas - Python

0

I have a problem with a job that I have to do, the question is that I have to open an image and put it on the canvas and if the image is bigger than the canvas I want to be able to move with the scrollbars, the question is that the scrollbars remain fixed without being able to move them. I'm new to Python, so if there's any error or suggestion in the code, I'd appreciate it if you could remark me.

import Tkinter as tk
import ttk
import tkFileDialog as chooser
from PIL import Image, ImageTk

class VentanaPpal(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)
        self.title("Visor de imagenes")
        self.geometry("900x600")
        self.marco = FrameCanvas(maestro=self)
        self.barraMenu = self.crearMenu()
        self.config(menu=self.barraMenu)
        self.imagen = Imagen()
        self.rowconfigure(0, weight=1)
        self.columnconfigure(0, weight=1)

    def crearMenu(self):
        menu = tk.Menu(self)
        menuArchivo = tk.Menu(menu)
        menuArchivo.add_command(label='Abrir Imagen',command=self.marco.cargarImagen)
        menuArchivo.add_separator()
        menuArchivo.add_command(label='Salir', command=self.destroy)
        menu.add_cascade(label='Archivo', menu=menuArchivo)

        return menu

class FrameCanvas(tk.Frame):

    def __init__(self, maestro):
        tk.Frame.__init__(self, master=maestro)
        self.imagen = Imagen()

        #Creacion de las barras de desplazamiento horizontal y vertical
        vbar = tk.Scrollbar(self.master, orient='vertical')
        hbar = tk.Scrollbar(self.master, orient='horizontal')
        vbar.grid(row=0, column=1, sticky='ns')
        hbar.grid(row=1, column=0, sticky='we')

        #Creacion del canvas, area donde se va a mostrar la imagen
        self.canvas = tk.Canvas(self.master, bg='blue', highlightthickness=0, xscrollcommand=hbar.set, yscrollcommand=vbar.set)
        self.canvas.grid(row=0, column=0, sticky='NESW')
        vbar.configure(command=self.canvas.yview)
        hbar.configure(command=self.canvas.xview)
        self.canvas.configure(scrollregion=self.canvas.bbox('all'))

    def cargarImagen(self):
        self.imagen.abrirImagen()
        self.mostrarImagen()

    def mostrarImagen(self):
        img = self.imagen.getImagen()
        if img!= None:
            self.canvas.create_image(0, 0, image=img, anchor='nw')


class Imagen:

    def abrirImagen(self):
        ruta = chooser.askopenfile(title='Seleccionar Imagen')
        if ruta != None:
           self.imagen = ImageTk.PhotoImage(Image.open(ruta))
        else:
           self.imagen = None

    def getImagen(self):
        return self.imagen
    
asked by FDarfe 22.12.2018 в 21:00
source

0 answers