@Kakrik

Мистика Python GUI (Kivy) и Multiprocessing?

Вот мой простенький код, который при нажатии на кнопку должен запускать функцию run_bot():

from kivy.app import App
from kivy.uix.button import Button
import multiprocessing as mp
import time
def run_bot():
    while True:
        print('Working...')
        time.sleep(2)
    
class MyApp(App):
        def build(self):
            self.btn=Button(
                        text='Старт',
                        font_size=30,
                        on_press=self.start,
                        background_color=(1,3,3,10)
                        )
            return self.btn
        def start(self,instance):
            self.proc=mp.Process(target=run_bot)
            self.proc.daemon=True
            self.proc.start() 
            
if __name__ == '__main__':
    MyApp().run()


При запуске этого файла .py двойным щелчком, открывается терминал, GUI, и код работает без нареканий. (Работаю через обычный IDLE 3.9)

Однако, если Python файл скомпилировать в .exe при помощи того же pyinstaller, когда я нажимаю кнопку, в моём приложении, то программа накладывает поверх основго окна приложения ещё одно, и так можно создать хоть 200 одинаковых окон. При этом скрипт run_bot() не запускается. (Компилирую с терминалом, конечно же.)

Для удобства записал на *видео*.
  • Вопрос задан
  • 400 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
В pyinstaller (и других "компиляторах") для мультипроцессорных приложений нужно сделать mp.freeze_support() сразу после if __name__ == '__main__':.
Но подобные действия то еще развлечение, в будущем еще что нибудь отвалится
https://docs.python.org/3/library/multiprocessing....
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы