Чтобы реализовать остановку цикла while
в Python при нажатии кнопки InlineKeyboardButton
, необходимо использовать механизмы асинхронности, такие как asyncio
и aiogram
, если вы работаете с Telegram Bot API.
Приведу пример кода на Python с использованием библиотеки aiogram
, которая позволяет создавать Telegram ботов:
import asyncio from aiogram import Bot, Dispatcher, types from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup API_TOKEN = 'your_token_here' bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) loop = asyncio.get_event_loop() running = True async def long_running_task(): global running while running: # Здесь выполняется ваша длительная задача print("Task is running...") await asyncio.sleep(1) @dp.message_handler(commands=['start']) async def start(message: types.Message): global running running = True await message.answer("Task started. Press the button to stop.") await long_running_task() @dp.callback_query_handler(lambda call: call.data == 'stop_task') async def stop_task_callback(callback_query: types.CallbackQuery): global running running = False await callback_query.answer("Task stopped!") keyboard = InlineKeyboardMarkup() keyboard.row(InlineKeyboardButton("Start Task", callback_data="start_task")) await callback_query.message.edit_reply_markup(reply_markup=keyboard) @dp.callback_query_handler(lambda call: call.data == 'start_task') async def start_task_callback(callback_query: types.CallbackQuery): global running running = True await callback_query.answer("Task started.") await long_running_task() if __name__ == '__main__': loop.create_task(dp.start_polling()) loop.run_forever()
В данном примере кода создаётся Telegram бот, который выполняет долгую задачу в цикле while running
, пока переменная running
равна True
. При нажатии на кнопку "Stop Task" задача останавливается изменением значения running
на False
. Кнопка "Start Task" позволяет снова начать выполнение задачи.
Таким образом, приведённый выше код демонстрирует возможность остановки цикла while
при помощи кнопки InlineKeyboardButton
в Telegram боте, написанном на Python с использованием библиотеки aiogram
.