Update main.py

This commit is contained in:
2025-01-27 00:02:16 +03:00
committed by GitHub
parent 671d99533e
commit 0bdd3580fd

267
main.py
View File

@@ -2,241 +2,11 @@ import tkinter as tk
from tkinter import filedialog, messagebox, simpledialog, ttk from tkinter import filedialog, messagebox, simpledialog, ttk
from PIL import Image, ImageTk from PIL import Image, ImageTk
import numpy as np import numpy as np
import json
# Translations dictionary # Load translations from JSON file
translations = { with open('translations.json', 'r', encoding='utf-8') as f:
"title": { translations = json.load(f)
"en": "Bitmap Editor",
"ru": "Редактор битмап изображений",
"eo": "Bitmapa Redaktilo",
"ja": "ビットマップエディタ",
"uk": "Редактор бітмап зображень"
},
"editor_tab": {
"en": "Editor",
"ru": "Редактор",
"eo": "Redaktilo",
"ja": "エディタ",
"uk": "Редактор"
},
"settings_tab": {
"en": "Settings",
"ru": "Настройки",
"eo": "Agordoj",
"ja": "設定",
"uk": "Налаштування"
},
"open_file": {
"en": "Open File",
"ru": "Выберите файл",
"eo": "Malfermi Dosieron",
"ja": "ファイルを開く",
"uk": "Відкрийте файл"
},
"selected_file": {
"en": "Selected file:",
"ru": "Выбранный файл:",
"eo": "Elektita dosiero:",
"ja": "選択されたファイル:",
"uk": "Вибраний файл:"
},
"select_bin_file": {
"en": "Select a file with the .bin or .BIN extension",
"ru": "Выберите файл с расширением .bin или .BIN",
"eo": "Elektu dosieron kun la .bin aŭ .BIN finiĝo",
"ja": ".binまたは.BIN拡張子のファイルを選択してください",
"uk": "Виберіть файл з розширенням .bin або .BIN"
},
"file_processing_error": {
"en": "An error occurred while processing the file",
"ru": "Произошла ошибка при обработке файла",
"eo": "Okazis eraro dum la prilaborado de la dosiero",
"ja": "ファイルの処理中にエラーが発生しました",
"uk": "Сталася помилка під час обробки файлу"
},
"no_file_selected": {
"en": "No file selected",
"ru": "Файл не выбран",
"eo": "Neniu dosiero elektita",
"ja": "ファイルが選択されていません",
"uk": "Файл не вибрано"
},
"image_reload_error": {
"en": "An error occurred while reloading the image",
"ru": "Произошла ошибка при перезагрузке изображения",
"eo": "Okazis eraro dum la reŝarĝado de la bildo",
"ja": "画像の再読み込み中にエラーが発生しました",
"uk": "Сталася помилка під час перезавантаження зображення"
},
"open_file_button": {
"en": "Open File",
"ru": "Открыть файл",
"eo": "Malfermi Dosieron",
"ja": "ファイルを開く",
"uk": "Відкрити файл"
},
"width_label": {
"en": "Image width (px):",
"ru": "Ширина изображения (px):",
"eo": "Bildo larĝo (pl):",
"ja": "画像の幅 (px):",
"uk": "Ширина зображення (px):"
},
"open_table_button": {
"en": "Open Pixel Table",
"ru": "Открыть таблицу пикселей",
"eo": "Malfermi Pikselan Tabelon",
"ja": "ピクセルテーブルを開く",
"uk": "Відкрити таблицю пікселів"
},
"save_image_button": {
"en": "Save Image",
"ru": "Сохранить изображение",
"eo": "Konservi Bildon",
"ja": "画像を保存",
"uk": "Зберегти зображення"
},
"save_bin_button": {
"en": "Save as BIN File",
"ru": "Сохранить в BIN файл",
"eo": "Konservi kiel BIN-dosiero",
"ja": "BINファイルとして保存",
"uk": "Зберегти як BIN файл"
},
"reload_image_button": {
"en": "Reload Image",
"ru": "Перезагрузить изображение",
"eo": "Reŝargi Bildon",
"ja": "画像を再読み込み",
"uk": "Перезавантажити зображення"
},
"redraw_grid_button": {
"en": "Redraw Grid",
"ru": "Перерисовать сетку",
"eo": "Remalfermi Krado",
"ja": "グリッドを再描画",
"uk": "Перемалювати сітку"
},
"export_image_button": {
"en": "Export Image",
"ru": "Экспортировать изображение",
"eo": "Eksporti Bildon",
"ja": "画像をエクスポート",
"uk": "Експортувати зображення"
},
"import_image_button": {
"en": "Import Image",
"ru": "Импортировать изображение",
"eo": "Importi Bildon",
"ja": "画像をインポート",
"uk": "Імпортувати зображення"
},
"language_label": {
"en": "Language:",
"ru": "Язык:",
"eo": "Lingvo:",
"ja": "言語:",
"uk": "Мова:"
},
"grid_color_label": {
"en": "Grid Color (RGB):",
"ru": "Цвет сетки (RGB):",
"eo": "Krada Koloro (RGB):",
"ja": "グリッドの色 (RGB):",
"uk": "Колір сітки (RGB):"
},
"error": {
"en": "Error",
"ru": "Ошибка",
"eo": "Eraro",
"ja": "エラー",
"uk": "Помилка"
},
"success": {
"en": "Success",
"ru": "Успех",
"eo": "Sukceso",
"ja": "成功",
"uk": "Успіх"
},
"image_saved": {
"en": "Image saved as",
"ru": "Изображение сохранено как",
"eo": "Bildo konservita kiel",
"ja": "画像は以下の名前で保存されました",
"uk": "Зображення збережено як"
},
"data_saved": {
"en": "Data saved in",
"ru": "Данные сохранены в",
"eo": "Datumoj konservitaj en",
"ja": "データは以下に保存されました",
"uk": "Дані збережені в"
},
"open_image_first": {
"en": "Open an image first",
"ru": "Сначала откройте изображение",
"eo": "Unue malfermu bildon",
"ja": "まず画像を開いてください",
"uk": "Спочатку відкрийте зображення"
},
"pixel_table": {
"en": "Pixel Table",
"ru": "Таблица пикселей",
"eo": "Piksela Tabelo",
"ja": "ピクセルテーブル",
"uk": "Таблиця пікселів"
},
"table_settings": {
"en": "Table Settings",
"ru": "Настройка таблицы",
"eo": "Tabele Agordoj",
"ja": "テーブル設定",
"uk": "Налаштування таблиці"
},
"enter_columns": {
"en": "Enter the number of columns:",
"ru": "Введите количество столбцов:",
"eo": "Enigu la nombron da kolumnoj:",
"ja": "列の数を入力してください:",
"uk": "Введіть кількість стовпців:"
},
"column": {
"en": "Column",
"ru": "Столбец",
"eo": "Kolumno",
"ja": "",
"uk": "Стовпець"
},
"image_exported": {
"en": "Image exported as",
"ru": "Изображение экспортировано как",
"eo": "Bildo eksportita kiel",
"ja": "画像は以下の名前でエクスポートされました",
"uk": "Зображення експортовано як"
},
"select_tiff_file": {
"en": "Select TIFF File",
"ru": "Выберите файл TIFF",
"eo": "Elektu TIFF-dosieron",
"ja": "TIFFファイルを選択してください",
"uk": "Виберіть файл TIFF"
},
"image_size_mismatch": {
"en": "Image size does not match the expected dimensions",
"ru": "Размер изображения не соответствует ожидаемым размерам",
"eo": "La bilda grando ne kongruas kun la atenditaj dimensioj",
"ja": "画像のサイズが期待される寸法と一致しません",
"uk": "Розмір зображення не відповідає очікуваним розмірам"
},
"image_import_error": {
"en": "An error occurred while importing the image",
"ru": "Произошла ошибка при импорте изображения",
"eo": "Okazis eraro dum la importado de la bildo",
"ja": "画像のインポート中にエラーが発生しました",
"uk": "Сталася помилка під час імпорту зображення"
}
}
def interpret_as_bitmap(file_path, width): def interpret_as_bitmap(file_path, width):
with open(file_path, 'rb') as file: with open(file_path, 'rb') as file:
@@ -317,13 +87,25 @@ def display_image():
def redraw_grid(): def redraw_grid():
display_image() display_image()
def toggle_pixel(event): def start_drawing(event):
global image global drawing, new_color
drawing = True
if event.num == 1: # Left mouse button
new_color = 255 # White
elif event.num == 3: # Right mouse button
new_color = 0 # Black
draw(event)
def stop_drawing(event):
global drawing
drawing = False
def draw(event):
global image, new_color
if drawing:
x = int(canvas.canvasx(event.x) / zoom_level) x = int(canvas.canvasx(event.x) / zoom_level)
y = int(canvas.canvasy(event.y) / zoom_level) y = int(canvas.canvasy(event.y) / zoom_level)
if 0 <= x < image.width and 0 <= y < image.height: if 0 <= x < image.width and 0 <= y < image.height:
current_color = image.getpixel((x, y))
new_color = 255 - current_color # Инвертирование цвета
image.putpixel((x, y), new_color) image.putpixel((x, y), new_color)
display_image() display_image()
@@ -462,6 +244,8 @@ file_path = ""
image = None image = None
tk_image = None tk_image = None
zoom_level = 1.0 zoom_level = 1.0
drawing = False
new_color = None
# Language selection # Language selection
language = tk.StringVar(value="en") language = tk.StringVar(value="en")
@@ -527,7 +311,12 @@ zoom_scale = tk.Scale(editor_tab, from_=100, to=500, orient=tk.HORIZONTAL, label
zoom_scale.set(100) zoom_scale.set(100)
zoom_scale.pack(side=tk.BOTTOM, fill=tk.X) zoom_scale.pack(side=tk.BOTTOM, fill=tk.X)
canvas.bind("<Button-1>", toggle_pixel) canvas.bind("<Button-1>", start_drawing)
canvas.bind("<B1-Motion>", draw)
canvas.bind("<ButtonRelease-1>", stop_drawing)
canvas.bind("<Button-3>", start_drawing)
canvas.bind("<B3-Motion>", draw)
canvas.bind("<ButtonRelease-3>", stop_drawing)
root.bind('<Control-r>', bind_hot_reload) root.bind('<Control-r>', bind_hot_reload)
# Settings Tab # Settings Tab