03.22 Git и ssh-ключи; tkinter: Text и Canvas

  1. SSH
    • Коротко о ssh
      • Терминальный доступ
    • {i} Заход на ssh prac.cs.msu.ru

      • {i} Настройка доступа по ключу (см. лекцию)

      • {i} Добавление ключа в агент (на машине прака он уже запущен)

    • Создание, клонирование и pus/pull bare-репозитория
    • {i} Если успеем — регистрация ключей на персональном git-портале (на примере git.cs.msu.ru)

  2. Tkinter Text

    • Координаты, маркеры, теги + см. лекцию

    • {i} Загрузить в Text текстовый файл, в котором все слова с названиями цветов перекрасить в соответствующий цвет.

      • Названия цветов
      • Правильно:
        • предварительно в цикле задать "foreground" для тегов с именами цветов,

        • а потом при загрузке текста определять, является ли слово цветом, и метить его тегом (точнее, использовать .insert() с тегом

  3. Tkinter Canvas

  4. {i} Нарисовать несколько овалов и забиндить на "<Motion>" правильный .move(), чтобы внезапно их можно было таскать

    • Подсказка используем три События

      • "<Button>" для начала перетаскивания

      • "<Motion>" с проверкой, что кнопка нажата (вот тут в конце)

        • .find_overlapping(…) на координаты, которые в событии приехали, получаем объект,

        • вспоминаем координаты из предыдущего события,
        • сдвигаем объект на разницу
      • "<ButtonRelease>" перетаскивание выключаем

  5. <!> Задача_1: Напишите программу-интерпретатор языка CCL (Canvas Control Language, название вымышленное), описывающего объекты для отрисовки в виджете Canvas.

    • программа на языке CCL - это текст, каждая строка которого имеет один из следующих видов:
      • #sometext (sometext - произвольный текст из 0 или более символов) - комментарий

      • object par1 par2 par3 ... - описание объекта для отрисовки на Canvas: object - имя объекта, после имени объекта - список параметров объекта с разделителем-пробелом; например:

        • oval 1 5 15 20.1 outline='yellow'

        • oval 2 -3 10 11.3 width=2.0

          • пятый параметр — ширина outline
        • rectangle 1.5 2.5 10 20 fill='red' dimple='grey75'

        • line 2 2 10 5 5 3 dash=(4,8)

      • также допустимы пустые строки, не содержащие ничего кроме пробелов и знаков табуляции, в т.ч. совсем пустые строки
    • ваша программа должна иметь интерфейс:
      • в левой части окна - область ввода (виджет Text), в которой редактируется CCL-программа

      • в правой части окна - область отрисовки (виджет Canvas), в которой отображается результат выполнения CCL-программы

      • внизу от области ввода - текстовая метка с подсказкой по оператору CCL
      • кнопки RUN и CLEAR

    • ваша программа должна реализовывать следующую функциональность:
      • поддержка следующих объектов: oval, rectangle, line (на занятии достаточно сделать поддержку oval)

      • синтаксическая подсветка: строки, начинающиеся с имени поддерживаемого объекта или с "#", отображаются зеленым шрифтом; непустые строки, начинающиеся с чего-либо другого, отображаются красным шрифтом
      • вывод подсказки по операторам CCL: при наведении мыши на строку, начинающуюся с имени поддерживаемого объекта, в текстовой метке отображается подсказка "Draw <имя объекта>", например "oval x0 y0 x1 y1 outline='color' fill='color'"

      • по нажатию кнопки RUN: очистка области отрисовки, затем последовательная обработка всех строк с описанием поддерживаемых объектов, с отрисовкой каждого из них на Canvas

      • по нажатию кнопки CLEAR: очистка области отрисовки

    • Подсказка: синтаксис CCL в точности соответствует синтаксису вызова соответствующего метода, поэтому для отрисовки достаточно проверить, что объект поддерживается и сформировать eval():

name, *parameters = line.split()
if name in known_names:
    try:
        eval(f"mycanvas.create_{name}({','.join(parameters)})")
    except:
        # пометить строку как ошибочную
else:
        # пометить строку как ошибочную

Д/З

  1. Выполнить упражнения {i} из плана занятия (для тренировки)

  2. Решить Задачу 1

LecturesCMC/PythonDevelopment2021/Prac/05_SshAndSmartWidgents (last edited 2021-03-29 00:09:46 by hbd)