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())