Python, Как сделать прогресс бар который будет показывать выполнение всей моей функции?
У меня есть небольшая программа,интерфейс для которого делал в QT Designer, в своей программе сделал единственную кнопку (больше и не надо), и при нажатии выполняется единственная функция, но внутри этой функции много разных процессов,такие как отправка письма с файлом через почту , получение нового письма с другим файлом , и вывод части полученных данных на экран ввиде текста . И я хотел бы что бы при выполнении этой единственной функции,показывался процесс выполнения в прогресс баре (как сделать прогресс бар в QT Designer я знаю)
Я только начал изучать программирование, поэтому заранее извиняюсь, если задал слишком банальный и простой вопрос
"""
def btn_click(self): # Функция которая выполняется при нажатии на кнопки
QCoreApplication.processEvents()
#Авторизация на почте и отправка письма с файлом
server = smtplib.SMTP_SSL('smtp.mail.ru', 465)
user = self.mailUsername
password = self.mailPassword
recipients = [self.adresat]
sender = self.mailUsername
subject = self.mailTheme
text = self.mailText
html = '<html><head></head><body><p>' + text + '</p></body></html>'
print("Авторизовался")
QCoreApplication.processEvents()
filepath = self.pathSend # Путь файла magcorr3.in для отправки роботу
basename = os.path.basename(filepath)
filesize = os.path.getsize(filepath)
QCoreApplication.processEvents()
msg = MIMEMultipart('alternative')
msg['Subject'] = subject
msg['From'] = 'NPF-Gorizont <' + sender + '>'
msg['To'] = ', '.join(recipients)
msg['Reply-To'] = sender
msg['Return-Path'] = sender
msg['X-Mailer'] = 'Python/' + (python_version())
QCoreApplication.processEvents()
part_text = MIMEText(text, 'plain')
part_html = MIMEText(html, 'html')
part_file = MIMEBase('application', 'octet-stream; name="{}"'.format(basename))
part_file.set_payload(open(filepath, "rb").read())
part_file.add_header('Content-Description', basename)
part_file.add_header('Content-Disposition', 'attachment; filename="{}"; size={}'.format(basename, filesize))
encoders.encode_base64(part_file)
QCoreApplication.processEvents()
msg.attach(part_text)
msg.attach(part_html)
msg.attach(part_file)
QCoreApplication.processEvents()
mail = smtplib.SMTP_SSL('smtp.mail.ru', 465)
mail.login(self.mailUsername, self.mailPassword)
mail.sendmail(sender, recipients, msg.as_string())
mail.quit()
print("Файл отправлен")
QCoreApplication.processEvents()
#Авторизация и загрузка файла
host = "imap.mail.ru"
username = self.mailUsername
password = self.mailPassword # Пароль для внешних приложений
download_folder = self.pathSave # Путь к папке загрузки файла от робота
QCoreApplication.processEvents()
print("Залогинился для получения")
QCoreApplication.processEvents()
if not os.path.isdir(download_folder):
os.makedirs(download_folder, exist_ok=True)
mail = Imbox(host, username=username, password=password, ssl=True, ssl_context=None, starttls=False)
QCoreApplication.processEvents()
if self.mailFilter == "flagged=True":
messages = mail.messages(sent_from= self.mailFromSaveUsername,
flagged=True)
else:
messages = mail.messages(sent_from= self.mailFromSaveUsername,
unread=True) # по умолчанию — входящие (сейчас стоит флаг = истинно что значит будут использоваться только помечанные письма
QCoreApplication.processEvents()
for (uid, message) in messages:
mail.mark_seen(uid) # пометить сообщение как прочитанное
print("Письмо открыто")
QCoreApplication.processEvents()
# Скачать файл из письма на почте
# Скачать файл из письма на почте
self.ui.Knopka.setEnabled(False)
QCoreApplication.processEvents()
for idx, attachment in enumerate(message.attachments):
if attachment['filename'].endswith(('.csv')): # Если название файла заканчивается на .csv
QCoreApplication.processEvents()
try:
att_fn = attachment.get('filename')
download_path = f"{download_folder}/{att_fn}"
print(download_path)
with open(download_path, "wb") as fp:
fp.write(attachment.get('content').read())
except:
print(traceback.print_exc())
self.ui.Knopka.setEnabled(True)
print("Файл Скачал")
mail.logout() # Закрыть почту
#Закрыть почту
QCoreApplication.processEvents()
# Работа с данными из таблицы (Получение и выведение данных)
dataset = pd.read_csv('Output.csv') # Открыть таблицы для работы с ней (таблица обязательно должно быть в папке с программой
df = dataset.fillna(0) # Необхомим для того чтобы перевести NoN в 0
print("Файл открыт для обработки")
X = df.iloc[-1:, 0:3].values # Значения глубины, угла и азимута из таблицы
glub = f" {X[0][0]}" # Глубина из таблицы
glubina = glub
ug = f" {X[0][1]}" # Угол из таблицы
ugol = ug
az = f" {X[0][2]}" # Азимут из таблицы
azimut = az
self.ui.glub_pole.setText(glubina) #Вывести глубину
self.ui.ugol_pole.setText(ugol) #Вывести угол
self.ui.az_pole.setText(az) # Вывести Азимут
Z = df.iloc[-1:, 19:22].values # Значения качества по Magcorr
G = f" {Z[0][0]}" # Gt из таблицы
Gt = G
B = f" {Z[0][1]}" # Bt из таблицы
Bt = B
D = f" {Z[0][2]}" # Dip из таблицы
Dip = D
self.ui.Gt_pole.setText(Gt) # Вывести Gt
self.ui.Bt_pole.setText(Bt) # Вывести Bt
self.ui.Dip_pole.setText(Dip) # Вывести Dip
#Функция для вывода сообщения НАРАЩИВАНИЕ или ПЕРЕСНЯТЬ в зависимости от качества
uspeshno = "Наращиваемся"
resurve = "Переснять замер"
if Bt == "?" or Bt == "0" and Dip == "?" or Dip == "0" and Gt == " ?" or Gt == "0" or Gt == " X":
self.ui.uspeh.setText(uspeshno)
else:
self.ui.resurv.setText(resurve)
"""
