Задать вопрос
@ffff567

Что тут можно упростить в коде?

Функций обработчика событий когда активны виджеты указанные на скриншоте. Каждый виджет это буква задания в игре ПолеЧудес
Ее работа заключается в следюущем
1. Если нажимаете клавишу BackSpace а в текущем виджете нет буквы которую можно удалить он удаляет ближашую букву слева
2. Если нажимаете клавишу BackSpace а виджете есть буква он просто удаляет из этого виджета букву
3. Если вы нажимаете на кнопку клиатуры не отсящиеся к русским буквам например Shift или цифры программа игнорирует нажатие
4. Если вы нажимаете на кнопку русской буквы а виджете есть уже буква функция заменяет букву на новую или если ее нет просто вставляет букву. И если в следующем виджете нет буквы перемещает фокус на следующий виджет (букву)

def on_key(event):
    widget = event.widget
    if event.keysym == "BackSpace": 
        if not widget.get():
            for widget in text_widgets[:text_widgets.index(widget)][::-1]:
                if widget["fg"]=="black":
                    widget.delete(0, tk.END)
                    задание[text_widgets.index(widget)]=""
                    widget.focus_set()
                    break
        return
    rus_буква = re.match(r'[а-яА-Я]', event.char)
    if rus_буква:
        widget.delete(0, tk.END)
        widget.insert(tk.END, event.char.lower())
        next_widget = widget.tk_focusNext()
        задание[text_widgets.index(widget)]=widget.get()
        if next_widget in text_widgets and next_widget["fg"]=="#E5E5E5": 
            next_widget.focus_set()
        return "break"
    elif not rus_буква: return "break"


6848d23258837632387802.jpeg
  • Вопрос задан
  • 562 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы