import tkinter as tk from tkinter import messagebox, filedialog class CrosswordApp: def __init__(self): self.root = tk.Tk() self.root.title("Кроссворд") self.root.geometry("700x620") self.root.resizable(False, False) top_frame = tk.Frame(self.root, padx=10, pady=10) top_frame.pack(fill="x") tk.Label(top_frame, text="Генератор кроссворда", font=("Arial", 12, "bold")).pack() tk.Label(top_frame, text="Центральное слово:").pack(anchor="w") self.central_entry = tk.Entry(top_frame, width=40) self.central_entry.pack() tk.Button(top_frame, text="OK", command=self.set_central_word).pack(pady=3) middle = tk.Frame(self.root) middle.pack() self.words_text = tk.Text(middle, width=30, height=8) self.words_text.grid(row=0, column=0, padx=5) self.clues_text = tk.Text(middle, width=30, height=8) self.clues_text.grid(row=0, column=1, padx=5) tk.Button(self.root, text="СГЕНЕРИРОВАТЬ", command=self.generate_crossword).pack(pady=5) tk.Button(self.root, text="СОХРАНИТЬ SVG", command=self.export_svg).pack(pady=5) self.canvas = tk.Canvas(self.root, width=650, height=300, bg="white") self.canvas.pack() self.central_word = None self.grid = {} self.root.mainloop() def set_central_word(self): word = self.central_entry.get().strip().upper() if not word.isalpha(): messagebox.showerror("Ошибка", "Только буквы!") return self.central_word = word def generate_crossword(self): if not self.central_word: messagebox.showerror("Ошибка", "Нет центрального слова") return words = [] for w in self.words_text.get("1.0", tk.END).splitlines(): w = w.strip().upper() if w.isalpha(): words.append(w) grid = {} mid_col = 10 start_row = 2 for i, ch in enumerate(self.central_word): grid[(start_row + i, mid_col)] = ch for i, word in enumerate(words): if i >= len(self.central_word): break letter = self.central_word[i] if letter in word: idx = word.index(letter) row = start_row + i for j, ch in enumerate(word): grid[(row, mid_col - idx + j)] = ch self.grid = grid # рисуем self.canvas.delete("all") size = 25 for (r, c), ch in grid.items(): x = c * size y = r * size self.canvas.create_rectangle(x, y, x+size, y+size) self.canvas.create_text(x+12, y+12, text=ch) def export_svg(self): if not self.grid: messagebox.showerror("Ошибка", "Сначала сгенерируй") return filename = filedialog.asksaveasfilename(defaultextension=".svg") if not filename: return rows = [r for r, c in self.grid.keys()] cols = [c for r, c in self.grid.keys()] min_r = min(rows) min_c = min(cols) max_r = max(rows) max_c = max(cols) size = 40 padding = 20 width = (max_c - min_c + 1) * size + padding * 2 height = (max_r - min_r + 1) * size + padding * 2 svg = '\n' svg += '