Pyqt5 on Windows(duplicates the main window when starting the process)

Всем привет, не смог найти ответа на вопрос. Проблема заключается в следующем: 1) Есть приложение на Windows, gui на pyqt5

import sys
import multiprocessing
from multiprocessing import Queue

from PyQt5.QtCore import QThread, pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QVBoxLayout, QTextBrowser


class my_process(multiprocessing.Process):
    def __init__(self, queue):
        super().__init__()
        self.queue = queue

    def run(self):
        self.queue.put('run')


class my_thread(QThread):
    def __init__(self, window, queue):
        super().__init__()
        self.window = window
        self.queue = queue

    def run(self):
        while True:
            command = self.queue.get()
            if command == "run":
                self.window.my_signal.emit("из IDE при клике на кнопку на экране появляется этот текст")
            # После сборки при нажатии на кнопку появляется еще одно окно приложения
            # ссылка на собранное приложение https://yadi.sk/d/HZqdZ8Eo16q3bw


class test_multicore(QWidget):

    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        # описание интерфейса#######################
        self.setGeometry(300, 300, 280, 200)
        self.setWindowTitle('Qthreads and multicore')
        self.layout = QVBoxLayout(self)
        self.testButton = QPushButton("test")
        self.testButton.clicked.connect(self.test)
        self.command_window = QTextBrowser()
        self.layout.addWidget(self.testButton)
        self.layout.addWidget(self.command_window)
        ##########################################
        # Сигнал для вывода на экран
        self.my_signal.connect(self.my_slot)

        self.queue = Queue()
        self.my_thread = my_thread(self, self.queue)
        self.my_thread.start()

    my_signal = pyqtSignal(str)

    @pyqtSlot(str)
    def my_slot(self, text):
        self.command_window.append(text)

    def test(self):
        self.my_process = my_process(self.queue)
        self.my_process.daemon = False
        self.my_process.start()


# pyinstaller --onedir  probe.py   команда для сборки приложения

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = test_multicore()
    window.show()
    app.exec_()

Суть проблемы : Когда я запускаю этот код из IDE всё работает как надо. Но если я собираю проект с помощью Pyinstaller, при запуске нового процесса(при клике на кнопку), моё основное окно дублируется и то что должно было происходить в самом процессе не выполняется. Я думаю что проблема в том что для процессов не задано имя, и он берет имя основного окна, но как это исправить не придумал. Прошу Вашей помощи!


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

Автор решения: Dmitriy

https://docs.python.org/2/library/multiprocessing.html#multiprocessing.freeze_support

добавил после запуска программы строчку freeze_support() и проблема решилась

freeze_support()
app = QApplication(sys.argv)
window = test_multicore()
window.show()
app.exec_()
→ Ссылка