Для решения вашей проблемы с бесконечным циклом в 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
при создании потока, чтобы он завершался вместе с основной программой.