При попытке вывести текст в статусбар в приложение на PyQt5 перед командой os.system() текст не выводится

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
969
219
43
20
Москва
Я недавно начал осваивать PyQt5, и вот когда я пытался написать приложение для компиляции файлов python в exe, возникла проблема:
в функции start перед компиляцией os.system(f'pyinstaller {self.path} --onefile') в статусбар должен выводиться текст 'Идет компиляция...',
но он почему - то не выводится. Сама компиляция проходит успешно, после нее в статусбаре появляется текст 'Готово!', и если я меняю команду например на os.system('echo 1') все работает. Так же выполняется другой код если поставить его вместо self.ui.info.showMessage('Идет компиляция...').

Почему такое может быть?
Файл программы и окна: ссылка
Официальный сайт pyinstaller: https://www.pyinstaller.org/

Код:
from PyQt5 import QtWidgets
from Window import Ui_MainWindow
import sys
import os
import shutil


class MyWindow(QtWidgets.QMainWindow):

    def __init__(self):
        super(MyWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.path = None
        self.name = None
        self.ui.Compile.clicked.connect(self.start)
        self.ui.Open.clicked.connect(self.open)
        self.num = 0

    def open(self):
        self.path = QtWidgets.QFileDialog.getOpenFileName(self, 'Open', '',
                                                          'Python(*.py *.pyw)')[0]
        #  Получаем путь к фалу
        self.name = self.path  # Вытаскиваем имя файла с расширением
        while '/' in self.name:
            self.name = self.name[1:]
            self.num += 1

        self.ui.Open_path.setText(self.name)  # Пишем имя файла в главном окне
        while '.' in self.name:
            self.name = self.name[:-1]  # Вытаскиваем имя файла без расширения

    def start(self):
        if self.path:  # Если файл выбран
            # Выводим в статусбар текст
            self.ui.info.showMessage('Идет компиляция...')
            # Компилируем приложения
            os.system(f'pyinstaller {self.path} --onefile')
            while not os.path.isfile(f'{self.path[:self.num]}dist/{self.name}.exe'):
                # Ждем завершения компиляции
                pass
            # Копируем готовый файл в папку с изначальным файлом
            shutil.copy(f'{self.path[:self.num]}dist/{self.name}.exe',
                        f'{self.path[:self.num]}')
            # Удаляем созданную при компиляции папку
            shutil.rmtree(f'{self.path[:self.num]}dist')
            # Удаляем созданную при компиляции папку
            shutil.rmtree(f'{self.path[:self.num]}build')
            # Удаляем созданную при компиляции папку
            shutil.rmtree(f'{self.path[:self.num]}__pycache__')
            self.ui.info.showMessage('Готово!')  # Выводим в статусбар текст
        else:  # Если файл не выбран
            # Выводим в статусбар текст
            self.ui.info.showMessage('Выберите файл')


app = QtWidgets.QApplication(sys.argv)
application = MyWindow()
application.show()
sys.exit(app.exec())
 

Форум IT Специалистов