Использую tkinter не могу сохранить изображение

Chychypa

Новичок
Пользователь
Июл 3, 2023
2
0
1
windows 10, python 3.8
Использую последующий код , пытаюсь создать окно и нарисовав в нём какую-то цифру сохранить его на рабочий стол , но не получается , подскажите как исправить проблему. Заранее благодарю
Python:
import tkinter as tk
from tkinter import messagebox
from PIL import Image, ImageDraw

# Размеры окна и холста
window_width = 280
window_height = 310
canvas_width = 280
canvas_height = 280

# Создание окна
window = tk.Tk()
window.title("Рисование")
window.geometry(f"{window_width}x{window_height}")

# Создание холста для рисования
canvas = tk.Canvas(window, width=canvas_width, height=canvas_height, bg="white")
canvas.pack()

# Функция для сохранения изображения
def save_image():
    # Создание пустого изображения
    image = Image.new("L", (canvas_width, canvas_height), "white")

    # Создание объекта для рисования на изображении
    draw = ImageDraw.Draw(image)

    # Получение данных о холсте
    data = canvas.postscript(colormode="gray")

    # Создание временного файла PNG на рабочем столе
    file_path = "C:/Users/username(я указал свой)/Desktop/drawing.png"

    try:
        # Сохранение временного файла
        image.save(file_path, format="PNG")

        # Изменение размера изображения до 28x28 пикселей
        resized_image = image.resize((28, 28), Image.ANTIALIAS)

        # Перезапись файла с измененным размером
        resized_image.save(file_path, format="PNG")

        messagebox.showinfo("Сохранение", "Изображение сохранено на рабочий стол.")
    except:
        messagebox.showerror("Ошибка", "Не удалось сохранить изображение.")

# Функция для обработки нажатия левой кнопки мыши
def start_drawing(event):
    canvas.bind("<B1-Motion>", draw)

# Функция для обработки движения мыши и рисования на холсте
def draw(event):
    x = event.x
    y = event.y
    r = 7  # Размер кисти

    # Рисование на холсте
    canvas.create_oval(x - r, y - r, x + r, y + r, fill="black")

# Привязка функции start_drawing к событию нажатия левой кнопки мыши
canvas.bind("<Button-1>", start_drawing)

# Создание кнопки для сохранения изображения
save_button = tk.Button(window, text="Сохранить", command=save_image)
save_button.pack()

# Запуск главного цикла обработки событий
window.mainloop()
 
Последнее редактирование:

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
419
113
43
вставьте код как код
 
  • Мне нравится
Реакции: Chychypa

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
419
113
43
Картинка будет лежать рядом со скриптом
Python:
import tkinter as tk
from tkinter import messagebox
from PIL import Image, ImageDraw

# Размеры окна и холста
window_width = 280
window_height = 310
canvas_width = 280
canvas_height = 280

# Создание окна
window = tk.Tk()
window.title("Рисование")
window.geometry(f"{window_width}x{window_height}")

# Создание холста для рисования
canvas = tk.Canvas(window, width=canvas_width, height=canvas_height, bg="white")
canvas.pack()

# Переменная для хранения рисунка
drawing = Image.new("RGB", (canvas_width, canvas_height), "white")
draw = ImageDraw.Draw(drawing)


# Функция для обработки нажатия левой кнопки мыши
def start_drawing(event):
    canvas.bind("<B1-Motion>", draw_on_canvas)


# Функция для обработки движения мыши и рисования на холсте
def draw_on_canvas(event):
    x = event.x
    y = event.y
    r = 7  # Размер кисти
   
    # Рисование на холсте
    canvas.create_oval(x - r, y - r, x + r, y + r, fill="black")
   
    # Рисование на рисунке
    draw.ellipse([x - r, y - r, x + r, y + r], fill="black")


# Функция для сохранения изображения
def save_image():
    file_path = "drawing.png"
    try:
        drawing.save(file_path)
        messagebox.showinfo("Сохранение", "Изображение сохранено.")
    except Exception as ex:
        print(ex)
        messagebox.showerror("Ошибка", "Не удалось сохранить изображение.")


# Привязка функций к событиям мыши
canvas.bind("<Button-1>", start_drawing)

# Создание кнопки для сохранения изображения
save_button = tk.Button(window, text="Сохранить", command=save_image)
save_button.pack()

# Запуск главного цикла обработки событий
window.mainloop()
 

Форум IT Специалистов