Как можно добавить функциональность в приложение PyQt5, чтобы остановить бесконечный цикл, который запускается при нажатии на кнопку?
Для использования циклов в PyQt5 вы можете использовать стандартные конструкции циклов языка Python, такие как `for` или `while`. Например, чтобы повторить определенный блок кода 10 раз, вы можете написать следующий код: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton class MyWidget(QWidget): def __init__(self): super().__init__() button = QPushButton('Нажми меня', self) button.clicked.connect(self.run_loop) def run_loop(self): for i in range(10): print(f'Итерация {i}') if __name__ == '__main__': app = QApplication(sys.argv) widget = MyWidget() widget.show() sys.exit(app.exec_()) ``` Чтобы добавить функциональность для остановки бесконечного цикла при нажатии на кнопку, вы можете использовать флаг, который будет изменяться при нажатии на кнопку. Например: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton class MyWidget(QWidget): def __init__(self): super().__init__() self.running = False button_start = QPushButton('Старт', self) button_start.clicked.connect(self.start_loop) button_stop = QPushButton('Стоп', self) button_stop.clicked.connect(self.stop_loop) def start_loop(self): self.running = True while self.running: print('Бесконечный цикл') def stop_loop(self): self.running = False if __name__ == '__main__': app = QApplication(sys.argv) widget = MyWidget() widget.show() sys.exit(app.exec_()) ``` Теперь при нажатии на кнопку "Старт" будет запускаться бесконечный цикл, который остановится при нажатии на кнопку "Стоп".
Для решения вашей проблемы с бесконечным циклом в PyQt5, вы можете использовать механизм многопоточности, чтобы цикл выполнялся в фоновом потоке, и это не блокировало главный интерфейс пользователя. Также вам понадобится добавить кнопку для остановки цикла. Вот пример кода, который демонстрирует, как это можно сделать:
from PyQt5 import QtCore, QtGui, QtWidgets import pyautogui import threading class Ui_MainWindow(object): # ... ваш предыдущий код ... def add_functions(self): self.pushButton.clicked.connect(self.start_autoswap) self.stopButton.clicked.connect(self.stop_autoswap) # Добавьте кнопку остановки в ваш интерфейс def start_autoswap(self): self.autoswap_thread = threading.Thread(target=self.autoswap, daemon=True) self.autoswap_thread.start() def stop_autoswap(self): self.running = False def autoswap(self): self.running = True while self.running: x = 459 y = 1402 Color = pyautogui.screenshot().getpixel((x, y)) print(Color) if Color == (185, 185, 185): pyautogui.press("2", presses=4, interval=0.01) # ... остальная часть вашего кода ...
В этом примере:
Методstart_autoswap
запускает методautoswap
в отдельном потоке.
Переменнаяself.running
используется для контроля выполнения цикла.
Методstop_autoswap
изменяет значениеself.running
наFalse
, что приводит к остановке цикла.
Не забудьте добавить кнопку остановки в ваш пользовательский интерфейс и соединить её с методомstop_autoswap
. Также убедитесь, что вы используетеdaemon=True
при создании потока, чтобы он завершался вместе с основной программой.