суббота, 3 октября 2026 г.

Болдинская осень

# -*- coding: utf-8 -*- """ Презентация «Болдинская осень» (8 класс) - PPTX + PDF - Два варианта фона - Автоматическая вставка картинок из папки images/ """ import os import subprocess import platform from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN from pptx.enum.shapes import MSO_SHAPE # ---------- Настройки ---------- FONT_MAIN = "Times New Roman" FONT_EMOJI = "Segoe UI Emoji" COLOR_TITLE = RGBColor(0x6B, 0x1F, 0x1F) # тёмно-бордовый COLOR_TEXT = RGBColor(0x2B, 0x2B, 0x2B) # почти чёрный COLOR_ACCENT = RGBColor(0xB8, 0x86, 0x0B) # золотой COLOR_TITLE_BG = RGBColor(0x3D, 0x0E, 0x0E) # фон титула (тёмный) COLOR_CONTENT_BG = RGBColor(0xFD, 0xF6, 0xE3) # кремовый фон слайдов OUT_PPTX = "Болдинская_осень.pptx" OUT_PDF = "Болдинская_осень.pdf" IMG_DIR = "images" # ---------- Данные слайдов ---------- # image: имя файла в images/ (или None) # image_position: "right" | "left" | "background" slides_data = [ { "title": "Болдинская осень (1830) 🍂", "subtitle": "«И пробуждается поэзия во мне...»\nА.С. Пушкин", "bullets": [], "image": "autumn.jpg", "image_position": "background", }, { "title": "Что такое «Болдинская осень»? 📖", "bullets": [ "Период необычайно плодотворного творчества А.С. Пушкина", "Место: село Болдино (Нижегородская губерния)", "Время: сентябрь — ноябрь 1830 года (≈ 3 месяца)", "Значение: «чудо» и «взрыв» в русской литературе ✨", ], "image": "boldino.jpg", "image_position": "right", }, { "title": "Причины поездки в Болдино 🐎", "bullets": [ "Личные дела: вступление во владение имением Кистенево", "Подготовка к женитьбе на Н. Гончаровой 💍", "Хозяйственные заботы и имущественные вопросы", "Вспышка холеры в Москве → карантины → задержка", ], "image": None, }, { "title": "Творческая лаборатория 🖋️", "bullets": [ "Драматургия: цикл «Маленькие трагедии» 🎭", "Поэзия: около 30 лирических стихотворений", "Проза: «Повести покойного И.П. Белкина» 📚", "Завершён роман в стихах «Евгений Онегин»", ], "image": "pushkin.jpg", "image_position": "right", }, { "title": "«Маленькие трагедии» 🎭", "bullets": [ "«Скупой рыцарь»", "«Моцарт и Сальери»", "«Каменный гость»", "«Пир во время чумы»", "Темы: скупость, зависть, любовь, страх смерти", ], "image": "tragedy.jpg", "image_position": "left", }, { "title": "«Повести Белкина» 📚", "bullets": [ "Первое завершённое прозаическое произведение Пушкина", "Авторство приписано вымышленному И.П. Белкину", "«Выстрел», «Метель», «Гробовщик»,", "«Станционный смотритель», «Барышня-крестьянка»", ], "image": "belkin.jpg", "image_position": "right", }, { "title": "Лирика Болдинской осени 🍁", "bullets": [ "«Бесы» — метель, потерянность, страх 🌪️", "«Элегия» — итоги и размышления о будущем", "«Румяный критик мой...» — ирония и раздумья", "Темы: судьба поэта, смысл жизни, любовь", ], "image": "autumn.jpg", "image_position": "right", }, { "title": "Завершение «Евгения Онегина» ✒️", "bullets": [ "Именно в Болдине поставлена финальная точка", "Роман создавался более 7 лет", "«Промчалось много, много дней...»", "Прощание с героями — Татьяной и Онегиным", ], "image": None, }, { "title": "Значение Болдинской осени 🌟", "bullets": [ "За 3 месяца написано столько, сколько иной автор — за жизнь", "Работа во всех жанрах: лирика, драма, проза, поэма", "Расцвет реализма в творчестве Пушкина", "Начало нового этапа в русской литературе", ], "image": None, }, { "title": "Интересные факты 💡", "bullets": [ "Последняя глава «Онегина» — 25 сентября", "«Метель» закончена уже 5 октября", "Пушкин жаловался на скуку — но создал шедевры", "В Болдине поэт много читал и делал выписки", ], "image": None, }, { "title": "Заключение 🎓", "bullets": [ "Болдинская осень — уникальный феномен в мировой литературе", "Уединение и внутренняя свобода рождают гениальное", "«Лучшее, что случилось с русской литературой в XIX веке»", ], "image": None, }, { "title": "Спасибо за внимание! 🙏", "bullets": [ "Вопросы для обсуждения:", "• Какое произведение запомнилось больше всего?", "• Почему осень стала самым плодотворным временем?", ], "image": None, }, ] # ---------- Вспомогательные функции ---------- def has_emoji(text: str) -> bool: return any(ord(ch) > 0x1F000 for ch in text) def set_run(run, text, size=20, bold=False, color=COLOR_TEXT, emoji=False): run.text = text run.font.size = Pt(size) run.font.bold = bold run.font.color.rgb = color run.font.name = FONT_EMOJI if emoji else FONT_MAIN def add_solid_background(slide, prs, color, z_order=2): """Сплошной цветной фон на весь слайд.""" bg = slide.shapes.add_shape( MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, prs.slide_height ) bg.fill.solid() bg.fill.fore_color.rgb = color bg.line.fill.background() # На задний план slide.shapes._spTree.remove(bg._element) slide.shapes._spTree.insert(z_order, bg._element) return bg def add_image_background(slide, prs, img_path, dark_overlay=True): """Картинка на весь слайд + затемнение для читаемости текста.""" if not os.path.exists(img_path): return False # Картинка на весь слайд pic = slide.shapes.add_picture( img_path, 0, 0, width=prs.slide_width, height=prs.slide_height ) slide.shapes._spTree.remove(pic._element) slide.shapes._spTree.insert(2, pic._element) # Затемняющий слой if dark_overlay: overlay = slide.shapes.add_shape( MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, prs.slide_height ) overlay.fill.solid() overlay.fill.fore_color.rgb = RGBColor(0x1A, 0x0A, 0x0A) overlay.fill.transparency = 0.35 # 35% прозрачности overlay.line.fill.background() slide.shapes._spTree.remove(overlay._element) slide.shapes._spTree.insert(3, overlay._element) return True def add_image_right(slide, prs, img_path, top=Inches(1.6), height=Inches(4.8)): """Картинка справа (текст слева).""" if not os.path.exists(img_path): return False # Вычисляем ширину пропорционально (приблизительно 4:3) width = int(height * 1.2) left = prs.slide_width - width - Inches(0.5) slide.shapes.add_picture(img_path, left, top, width=width, height=height) return True def add_image_left(slide, prs, img_path, top=Inches(1.6), height=Inches(4.8)): """Картинка слева (текст справа).""" if not os.path.exists(img_path): return False width = int(height * 1.2) left = Inches(0.5) slide.shapes.add_picture(img_path, left, top, width=width, height=height) return True def add_title(slide, text, color=COLOR_TITLE): title_box = slide.shapes.title tf = title_box.text_frame tf.text = "" p = tf.paragraphs[0] p.alignment = PP_ALIGN.LEFT words = text.split(" ") for i, word in enumerate(words): run = p.add_run() set_run( run, word + (" " if i < len(words) - 1 else ""), size=28, bold=True, color=color, emoji=has_emoji(word), ) def add_bullets(slide, bullets, left=Inches(0.8), top=Inches(1.7), width=Inches(11.5), height=Inches(5.2), size=20, color=COLOR_TEXT): box = slide.shapes.add_textbox(left, top, width, height) tf = box.text_frame tf.word_wrap = True for i, line in enumerate(bullets): p = tf.paragraphs[0] if i == 0 else tf.add_paragraph() p.space_after = Pt(10) run = p.add_run() set_run(run, "• " + line, size=size, color=color, emoji=has_emoji(line)) # ---------- Создание презентации ---------- def build_presentation(): prs = Presentation() prs.slide_width = Inches(13.33) # 16:9 prs.slide_height = Inches(7.5) for idx, data in enumerate(slides_data): img_name = data.get("image") img_path = os.path.join(IMG_DIR, img_name) if img_name else None pos = data.get("image_position", "right") if idx == 0: # ---------- ТИТУЛЬНЫЙ СЛАЙД ---------- slide = prs.slides.add_slide(prs.slide_layouts[0]) # Фон: картинка или тёмный цвет if img_path and pos == "background" and os.path.exists(img_path): add_image_background(slide, prs, img_path, dark_overlay=True) else: add_solid_background(slide, prs, COLOR_TITLE_BG) # Заголовок — белый для контраста add_title(slide, data["title"], color=RGBColor(0xFF, 0xF3, 0xD6)) # Подзаголовок sub_box = slide.placeholders[1] tf = sub_box.text_frame tf.text = "" for i, line in enumerate(data["subtitle"].split("\n")): p = tf.paragraphs[0] if i == 0 else tf.add_paragraph() run = p.add_run() set_run(run, line, size=20, color=COLOR_ACCENT) else: # ---------- КОНТЕНТНЫЕ СЛАЙДЫ ---------- slide = prs.slides.add_slide(prs.slide_layouts[1]) add_solid_background(slide, prs, COLOR_CONTENT_BG) # Картинка (если есть) image_placed = False if img_path and os.path.exists(img_path): if pos == "right": image_placed = add_image_right(slide, prs, img_path) elif pos == "left": image_placed = add_image_left(slide, prs, img_path) # Заголовок add_title(slide, data["title"]) # Текст: если картинка справа — сужаем блок if image_placed and pos == "right": add_bullets(slide, data["bullets"], left=Inches(0.6), top=Inches(1.7), width=Inches(7.2), height=Inches(5.2)) elif image_placed and pos == "left": add_bullets(slide, data["bullets"], left=Inches(6.0), top=Inches(1.7), width=Inches(7.0), height=Inches(5.2)) else: add_bullets(slide, data["bullets"]) prs.save(OUT_PPTX) print(f"✅ PPTX сохранён: {OUT_PPTX}") # ---------- Конвертация в PDF ---------- def convert_to_pdf(): system = platform.system() cmd = None if system == "Windows": candidates = [ r"C:\Program Files\LibreOffice\program\soffice.exe", r"C:\Program Files (x86)\LibreOffice\program\soffice.exe", ] for c in candidates: if os.path.exists(c): cmd = [c, "--headless", "--convert-to", "pdf", OUT_PPTX] break if not cmd: print("⚠️ LibreOffice не найден. PDF не создан.") print(" Скачайте: https://www.libreoffice.org/download/") return else: cmd = ["libreoffice", "--headless", "--convert-to", "pdf", OUT_PPTX] try: subprocess.run(cmd, check=True) print(f"✅ PDF сохранён: {OUT_PDF}") except Exception as e: print(f"❌ Ошибка конвертации: {e}") # ---------- Запуск ---------- if __name__ == "__main__": os.makedirs(IMG_DIR, exist_ok=True) # создаём папку images, если нет build_presentation() convert_to_pdf() print("\n🎉 Готово!") print(f" • {OUT_PPTX}") print(f" • {OUT_PDF}") print(f" • Папка с картинками: {IMG_DIR}/")

среда, 8 мая 2024 г.

Наставник

ВопросыСсылки ответов
На чём основано ваше понимание наставничества?https://www.youtube.com/live/U2W-BisaXdM?si=NLsZgITl-mqROFV2&t=233
Какие качества свойственны истинному наставнику?https://www.youtube.com/live/U2W-BisaXdM?si=hDpqwkA_T-teHiEF&t=329
Что значит быть образцом в глазах ребёнка?https://www.youtube.com/live/U2W-BisaXdM?si=erz1JFRc0lFoTY5I&t=405
Что представляет собой «большой маленький»?https://www.youtube.com/live/U2W-BisaXdM?si=9h3kqIRolnFKTdfv&t=1964
В чём суть психологии согласия?https://www.youtube.com/live/U2W-BisaXdM?si=mRs2Pp76kwMOVBO7&t=2228
Как научиться видеть мир глазами ребёнка?https://www.youtube.com/live/U2W-BisaXdM?si=A1HWje5lae05QpAU&t=2185