Skip to content

uros-5/GettyImages-Downloader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Projekat1 za predmet namenski racunarski sistemi

Klikom na main.py se pokrece aplikacija. U glavni fajl uvozimo tkinter biblioteku sa svim klasama:

from tkinter import *
import tkinter.constants as constants

Kao i klase iz naseg package-a GUIs > modul GettyFrame:

from GUIs.GettyFrame import Root,GettyFrame,PicturesFrame

Zatim koristimo Root klasu koja ce drzati sve druge klase(tj. widgete kojima je roditelj klasa Root):

root = Root()

Nakon podesavanja glavne klase,pozivamo metodu:

root.mainloop()

i program prelazi u stanje u kome ceka korisnikove akcije.


GettyFrame.py sadrzi te tri klase koje ce se najvise koristiti. Uvozimo sve biblioteke koje nam trebaju za rad aplikacije:

from tkinter import *
import pyperclip
from urllib.request import urlopen
from PIL import Image, ImageTk
import io
import tkinter.constants as constants
import re
import time
from concurrent.futures import ThreadPoolExecutor, as_completed
from tkinter import messagebox
import threading
from tkinter.ttk import Progressbar
import os

Kao i nase dve klase iz package-a Downloaders.GettyDownloader i Slike:

from Downloaders.GettyDownloader import GettyDownloader
from Slike import Slike

Klasa Root: Posto je to glavni ekran ova klasa mora da nasledjuje Tk iz tkinter biblioteke.

class Root(Tk):

Zatim override-ujemo konstruktor te klase,gde koristimo i pack za layout:

def __init__(self, *args, **kwargs):
    Tk.__init__(self, *args, **kwargs)
    container = Frame(self)
    container.pack(side="top", fill="both", expand=True)
    container.grid_rowconfigure(0, weight=1)
    container.grid_columnconfigure(0, weight=1)

Zatim kreiramo sve prozore(objekte) i dodajemo ih u recnik:

self.prozori = {}
for frejm in (GettyFrame,PicturesFrame,BlankFrame):
    page_name = frejm.__name__
    frame = frejm(container, controller=self)
    self.prozori[page_name] = frame
    frame.grid(row=0, column=0, sticky="nsew")

Za prvi ekran koji ce biti vidljiv korisniku postavaljamo GettyFrame gde ce korisnik unositi podatke o slikama koje mu trebaju:

self.resizable(False, False)
self.prebaci_frejm("GettyFrame")
self.geometry("746x256")

Promenljiva downloadProgress se koristi za vreme preuzimanja slika

self.downloadProgress = 0

Metoda prebaci_frejm prima parametre:

  • page_name - za Frame koji na koji ce da se prebaci
  • urll - link koji bi trebalo da sadrzi stranicu sa svim slikama
  • br - broj stranice za pretragu
def prebaci_frejm(self, page_name,urll='',br=1):
        prozor = self.prozori[page_name]

Kako program ne bi freeze-ovao koristimo dva Thread-a:

if urll != '':
    self.t1_set()
    self.t1_start()

    self.t2_set(urll,br)
    self.t2_start()
else:
   prozor.