This site is developed to XHTML and CSS2 W3C standards. If you see this paragraph, your browser does not support those standards and you need to upgrade. Visit WaSP for a variety of options.

php pastebin - collaborative irc debugging view php source

Paste #676

Posted by: BitByByte
Posted on: 2026-04-16 18:40:44
Age: 8 hrs ago
Views: 5
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 = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'
        svg += '<svg xmlns="http://www.w3.org/2000/svg" '
        svg += 'width="{0}" height="{1}" viewBox="0 0 {0} {1}">\n'.format(width, height)

        # сетка
        for (r, c), ch in self.grid.items():
            x = (c - min_c) * size + padding
            y = (r - min_r) * size + padding

            svg += '<rect x="{0}" y="{1}" width="{2}" height="{2}" fill="white" stroke="black" stroke-width="2"/>\n'.format(x, y, size)

            svg += '<text x="{0}" y="{1}" font-size="18" text-anchor="middle" fill="black">{2}</text>\n'.format(
                x + size/2,
                y + size/2 + 6,
                ch
            )

        svg += '</svg>'

        try:
            f = open(filename, "w", encoding="utf-8")
            f.write(svg)
            f.close()
            messagebox.showinfo("OK", "SVG сохранён")
        except Exception as e:
            messagebox.showerror("Ошибка", str(e))

if __name__ == "__main__":
    CrosswordApp()

Download raw | Create new paste

© BitByByte, 2026.
Downgrade Counter