как присвоить значение переменной в клавиатуре telebot?
Здравствуйте! Не могу передать значение для переменной в телеграмм боте! Вот код, мне нужно от пользователя получить город из предоставленного списка. Но на этапе вывода города происходит ошибка
NameError: name 'r' is not defined
def button(message):
markup = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True, one_time_keyboard = True)
button_1 = types.KeyboardButton('Москва')
button_2 = types.KeyboardButton('Санкт-Перебург')
button_3 = types.KeyboardButton('Екатеренбург')
button_4 = types.KeyboardButton('Краснодар')
button_5 = types.KeyboardButton('Ярославль')
button_6 = types.KeyboardButton('Воронеж')
button_7 = types.KeyboardButton('Уфа')
button_8 = types.KeyboardButton('Пермь')
button_9 = types.KeyboardButton('Омск')
button_10 = types.KeyboardButton('Ростов-на-Дону')
markup.add(button_10, button_9, button_8, button_7, button_6, button_5, button_4, button_3, button_2, button_1)
bot.send_message(message.from_user.id, 'Выбирай город', reply_markup=markup)
global r;
if message.text == 'Москва':
bot.send_message(message.chat.id, 'Москва')
r = 'moskva'
elif message.text == 'Санкт-Перебург':
bot.send_message(message.chat.id, 'Санкт-Перебург')
r = 'sankt-peterburg'
elif message.text == 'Екатеренбург':
bot.send_message(message.chat.id, 'Екатеренбург')
r = 'ekaterinburg'
elif message.text == 'Краснодар':
bot.send_message(message.chat.id, 'Краснодар')
r = 'krasnodar'
elif message.text == 'Ярославль':
bot.send_message(message.chat.id, 'Ярославль')
r = 'yaroslavl'
elif message.text == 'Воронеж':
bot.send_message(message.chat.id, 'Воронеж')
r = 'voronezh'
elif message.text == 'Уфа':
bot.send_message(message.chat.id, 'Уфа')
r = 'ufa'
elif message.text == 'Пермь':
bot.send_message(message.chat.id, 'Пермь')
r = 'perm'
elif message.text == 'Омск':
bot.send_message(message.chat.id, 'Омск')
r = 'omsk'
elif message.text == 'Ростов-на-Дону':
bot.send_message(message.chat.id, 'Ростов-на-Дону')
r = 'rostov-na-donu'
bot.register_next_step_handler(message, parser);
print(r)
Ответы (1 шт):
- Зачем тебе там в
global r;- ";"?
Смотри. Есть 2 варианта того как тебе порешать эту проблему:
Вариант 1, с продолжением использования global variables:
Import'ишь:
from tkinter import StringVar
Где то вначале, прямо в main(), там где код выполняется при запуске программы 1 раз задаешь:
global r
r = StringVar()
# и если хочется можешь сразу в нее что то задать, к примеру
r.set("gde-gde, V KARAGANDE!")
Дальше в КАЖДОЙ функции где ты собираешься использовать r задаешь
def ochen_poleznaja_funktcija():
global r
...
def drugaja_ne_menee_poleznaja_funktcija():
global r
...
Чтобы задать значение делаешь .set()
r.set("sankt-peterburg") # и.т.п. во всех местах где r =
И чтобы добыть вызываешь
r_for_things = r.get()
# и дальше либо работаешь с `r_for_things`,
# либо можно просто дергать в каждый раз `r.get()`
Правда я уже не помню что там с типами, почекай чего там тебе .get выдаст, хотя по идее это должен быть правильный string, но это не точно.
И 2 вариант, куришь ответ на вот этот вопрос и пытаешься переделать под работу без глобалов.