Я недавно начал осваивать PyQt5, и вот когда я пытался написать приложение для компиляции файлов python в exe, возникла проблема:
в функции start перед компиляцией
но он почему - то не выводится. Сама компиляция проходит успешно, после нее в статусбаре появляется текст 'Готово!', и если я меняю команду например на
Почему такое может быть?
Файл программы и окна: ссылка
Официальный сайт pyinstaller: https://www.pyinstaller.org/
в функции 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())