• Как остановить поток в python по его имени?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Поток должен самостоятельно управлять собственным жизненным циклом. Другой поток может только отправлять ему сигналы, изменяя общее состояние - переменную, очередь или какой-нибудь из примитивов синхронизации.
    Ответ написан
    Комментировать
  • Как создать новое окно в PyQt5?

    @Sergey6661313
    причина: переменная new_window умирает сразу как заканчивается функция new_form() (почему? во славу Сатаны конечно!)
    Пути решения:

    1) создать какую нибудь глобальную переменную. Но глобальные переменные это плохой тон (незнаю почему) :
    new_window = None
    def new_form():   
        global new_window
        new_window = uic.loadUi("interface2.ui")
        new_window.setWindowTitle("New form")
        new_window.show()


    2) создать переменную глобальный массив окон (так делаю я - это всё ещё "плохой тон" но зато потом можно циклом разом удалить все создаваемые окна например...) :
    мой_список_окон = []
    def new_form():   
        global мой_список_окон
        new_window = uic.loadUi("interface2.ui")
        new_window.setWindowTitle("New form")
        new_window.show()
        мой_список_окон.append(new_window)


    3) назначить new_window дочерю main_window (идиологически правильный вариант):
    def new_form(parent):   
        new_window = uic.loadUi("interface2.ui")
        new_window.setWindowTitle("New form")
        new_window.show()
        new_window.setParent(parent)
    
    import test2
    main_window.pushButton.clicked.connect(lambda: test2.new_form(main_window))


    4) new_window должна быть переменной того обьекта который гарантировано не будет удалён (незнаю насчёт идиалогии... все варианты правильные. ):
    def new_form(parent):   
        parent.new_window = uic.loadUi("interface2.ui")
        parent.new_window.setWindowTitle("New form")
        parent.new_window.show()
    
    
    import test2
    main_window.pushButton.clicked.connect(lambda: test2.new_form(main_window))
    Ответ написан
    3 комментария
  • Как остановить поток в python по его имени?

    Штатного механизма нет. Вам придётся реализовать какой-либо механизм управления вашим потоком.

    Как вариант - передавать потоку его индивидуальную булеву переменную. Непрерывно проверять переменную в потоке. Как только её состояние изменится - завершать поток.
    Ответ написан
    1 комментарий