Черновик 2
суббота, 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}/")
понедельник, 28 сентября 2026 г.
суббота, 25 января 2025 г.
пятница, 6 сентября 2024 г.
среда, 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 |
суббота, 4 мая 2024 г.
Подписаться на:
Сообщения (Atom)


