Python
Как закрыть приложение PyQt5 чрез код другой программы.
У меня задача запускать и прерывать программу через главный файл. Как запускать я научился и чтобы одновременно работали два цикла тоже (Один это работа GUI другой обработчик). Но я без понятия как при завершении работы GUI отключался обработчик в главном файле.
Для того чтобы одновременно работали два цикла (GUI и обработчик) и чтобы вы могли закрыть приложение из главного файла, вам нужно использовать многопоточность или многопроцессность. Однако, я рекомендую вам использовать многопоточность, так как это может быть проще для ваших нужд, особенно если вы хотите разделять данные между GUI и обработчиком.
Вот пример, как вы можете организовать ваш код:
Создайте два модуля: один для GUI и один для обработчика.
В модуле GUI запускайте GUI в главном потоке, а обработчик в отдельном потоке.
В модуле GUI определите метод для закрытия обработчика, когда GUI закрывается.
Примерный код:
main.py (ваш главный файл):
python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
from gui_module import GUIWindow
from handler_module import HandlerThread
if __name__ == "__main__":
app = QApplication(sys.argv)
# Создаем и запускаем GUI
gui_window = GUIWindow()
gui_window.show()
# Создаем и запускаем обработчик в отдельном потоке
handler_thread = HandlerThread()
handler_thread.start()
# Определяем функцию для закрытия обработчика при закрытии GUI
def on_gui_closed():
handler_thread.stop()
gui_window.closed.connect(on_gui_closed)
sys.exit(app.exec_())
gui_module.py:
python
from PyQt5.QtWidgets import QMainWindow, QPushButton
class GUIWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("GUI Window")
self.setGeometry(100, 100, 400, 300)
# Добавляем кнопку для тестирования GUI
self.button = QPushButton("Test GUI Button", self)
self.button.setGeometry(100, 100, 200, 50)
# Сигнал, сигнализирующий о закрытии GUI
self.closed = self.closeEvent
# Добавьте код для вашего GUI здесь
handler_module.py:
python
from PyQt5.QtCore import QThread
class HandlerThread(QThread):
def __init__(self):
super().__init__()
self.running = True
def run(self):
# Поместите ваш код обработчика сюда
# Например, цикл, который выполняется пока self.running равно True
while self.running:
print("Handler is running...")
def stop(self):
self.running = False
self.wait()
В данном примере, при закрытии GUI окна (GUIWindow) будет вызываться функция on_gui_closed, которая остановит обработчик (HandlerThread) и завершит его работу. Вы можете доработать этот пример согласно своим потребностям.
Убедитесь, что код обработчика (в handler_module.py) выполняется в цикле, и этот цикл периодически проверяет переменную self.running. Таким образом, когда self.running станет False, обработчик закончит свою работу и поток завершится.
Один из способов - использовать модуль subprocess для вызова другой программы. Например, есть приложение на PyQt5, которое через subprocess вызывает другую программу (например, xed). Нужно закрыть окно приложения на PyQt, но чтобы при этом не закрылось открытое приложение. Открытое приложение не закрывается, если убить окно главного из вне (через xkill). Можно добиться такого же эффекта, только изнутри самого приложения.
Чтобы прервать работу обработчика в главном файле при завершении работы GUI, можно использовать механизм сигналов и слотов PyQt5. Можно создать сигнал, который будет испускаться при завершении работы GUI, и соединить его со слотом в главном файле, который будет отключать обработчик. Таким образом, когда GUI завершит работу, сигнал будет испущен и обработчик будет отключен.
Чтобы прервать работу обработчика в главном файле при завершении работы GUI, можно использовать механизм сигналов и слотов PyQt5. Можно создать сигнал, который будет испускаться при завершении работы GUI, и соединить его со слотом в главном файле, который будет отключать обработчик. Таким образом, когда GUI завершит работу, сигнал будет испущен и обработчик будет отключен.
Похожие вопросы
- Код на программу python пж
- Во втором коде программы разобрался, а в предыдущем нет.
- Помогите написать программу на Python, моя версия кода на скрине, вроде всё работает, но автопроверка не проходит.
- Ускорьте работу программы (готовый правильный код написан уже)
- Если две программы работают одинаково но код у них разный, то - это считается ли уже как другая программа ? Понять могу
- Можете помочь! Нужен код для Python, что бы он заменял определенный текст в файле
- Помогите составить правильную программу(код) для уравнения в pycharm
- Приложения для графического интерфейса в питоне
- Помогите чайнику в Питоне. Как правильно перейти на другую строку в коде, чтоб он не запустился раньше времени?
- улучшить код программы на Pytho