PyQt5 Зависает UI при запуске цикла в программе

Всем привет. Подскажите тугодуму, как можно функцию get_photo запихать в отдельный поток, чтобы она не стопорила интерфейс программы...Никак не могу понять, как работать с потоками...


import sys
import vk
from threading import Thread
from PyQt5 import QtWidgets
from urllib.request import urlretrieve


import template_ui

v = 5.73


############### Создание главного класса ###############
class WindowsApp(QtWidgets.QMainWindow,template_ui.Ui_MainWindow):

    ### Классовые переменные ###

    check_auth = False
    ##### Инициализация
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.set_album = 'profile'

        self.th_while = Thread(target=self.get_photo)
        self.auth_button.pressed.connect(self.auth) ## Событие нажатия кнопки "Вход"
        #self.pm_Button.pressed.connect(self.get_photo) ## Событие нажатия на кнопку "Получить сообщения
        self.pm_Button.pressed.connect(self.get_photo)
        self.from_p.setChecked(True)
        self.from_p.clicked.connect(self.func_profile)
        self.from_s.clicked.connect(self.func_saved)

    def auth(self):
    ##### Авторизация
        self.username = self.username_text.text()
        self.password = self.password_text.text()

        try:
            self.session = vk.AuthSession(app_id=7325127
                                     ,user_login=self.username
                                     ,user_password=self.password)
        except:
            pass

        if self.session:
            self.vk_api = vk.API(self.session)
            self.hi_first = self.vk_api.users.get(v=v)[0]['first_name']
            self.hi_last = self.vk_api.users.get(v=v)[0]['last_name']
            self.hi_id = self.vk_api.users.get(v=v)[0]['id']
            self.text_logger.append("Добро пожаловать, " + str(self.hi_first) + "!" + "\n")
            self.text_logger.append("Твой уникальный ID VK: " + str(self.hi_id) + "\n")
            self.text_logger.append("Что будем делать дальше?" + "\n")
        else:
            self.text_logger.append("Войти не удалось! Попробуйте снова")



    def get_photo(self):
        self.count_for = 0
        self.count = self.vk_api.photos.get(v=v, album_id = self.set_album)['count']
        self.items = self.vk_api.photos.get(v=v, album_id = self.set_album)['items']

        for item in self.items:
            #print(item)
            self.text_logger.append("Загрузка фото №" + str(self.count_for+1))
            if 'photo_1280' in item:
                print(item['photo_1280'])
                print(item['id'])
                #Сохранение фотографии
                self.loadphoto = urlretrieve(item['photo_1280'],'Download_Photo/Photo' + str(self.count_for) + ".png")
                self.count_for += 1

            elif 'photo_807' in item:
                print(item['photo_807'])
                print(item['id'])
                # Сохранение фотографии
                self.loadphoto = urlretrieve(item['photo_807'],'Download_Photo/Photo' + str(self.count_for) + ".png")
                self.count_for += 1

            elif 'photo_604' in item:
                print(item['photo_604'])
                print(item['id'])
                # Сохранение фотографии
                self.loadphoto = urlretrieve(item['photo_604'],'Download_Photo/Photo' + str(self.count_for) + ".png")
                self.count_for += 1

            if self.count_for == self.count:
                self.text_logger.append('Все фото загружены')

    def func_profile(self):
        self.set_album='profile'
        print(str(self.set_album))

    def func_saved(self):
        self.set_album = 'saved'
        print(str(self.set_album))


#class Get_Photos(QtWidgets)



app = QtWidgets.QApplication([])
window = WindowsApp()
window.show()



sys.exit(app.exec())


Ответы (0 шт):