Делал что то типо "Языка" на Python и почемуто выдаёт ошибку если два раза запустить код с input()
Делал что то вроде своего ЯП (скорее прогу для написания кода с переводом Python на русский).
import tkinter as tk
from tkinter import Menu
from tkinter import filedialog
from tkinter import scrolledtext
import os
import time
import pyperclip
import sys
theme_dark = {
'bg': '#282c34', #'#282c34'
'fg': "#ffffff", #"#61aeee"
'selectbg': '#44475a',
'selectfg': '#ffffff',
'menu_bg': '#36393f',
'menu_fg': '#ffffff',
'menu_active': '#4e5460'
}
theme_light = {
'bg': '#ffffff',
'fg': '#000000',
'selectbg': '#c0c0c0',
'selectfg': '#000000',
'menu_bg': '#f0f0f0',
'menu_fg': '#000000',
'menu_active': '#e0e0e0'
}
#Команды Udaw
вывод=print
ввод=input
ждать=time.sleep
да=True
нет=False
отчисть=os.system("cls")
#С большой буквы
Вывод=print
Ввод=input
Ждать=time.sleep
Да=True
Нет=False
Отчисть=os.system("cls")
#Команды Udaw
# Функция открытия
def open_file():
file = filedialog.askopenfilename(
title="Открыть файл",
filetypes=(("Скрипты", "*.uda *.txt"), ("Все файлы", "*.*"))
)
if file:
print(f"Выбран файл: {file}")
with open(file, 'r') as f:
text_area.delete(1.0, tk.END)
text_area.insert(1.0, f.read())
# Функция сохранения файла
def save_file():
file = filedialog.asksaveasfilename(
defaultextension=".uda",
filetypes=(("Файлы Udaw", "*.uda"), ("Текстовые файлы", "*.txt"), ("Все файлы", "*.*")),
title="Сохранить файл"
)
if file:
try:
with open(file, 'w') as f:
f.write(text_area.get(1.0, tk.END))
print(f"Файл сохранен: {file}")
except Exception as e:
print(f"Ошибка при сохранении файла: {str(e)}")
def copy():
pyperclip.copy(text_area.get(1.0, tk.END))
def paste():
text_area.delete(1.0, tk.END) # Удаляем всё
text_area.insert(1.0, pyperclip.paste())
def cut():
pyperclip.copy(text_area.get(1.0, tk.END))
text_area.delete(1.0, tk.END) # Удаляем всё
# Функция конвертации кода в Python
def convert():
# Получаем код из текстового поля
Code = text_area.get(1.0, tk.END)
Code = Code.replace("если", "if")
Code = Code.replace("цикл", "while")
Code = Code.replace("импорт", "import")
Code = Code.replace("выход", "exit()")
Code = Code.replace("вывод", "print")
Code = Code.replace("ввод", "input")
Code = Code.replace("ждать", "time.sleep")
Code = Code.replace("да", "True")
Code = Code.replace("нет", "False")
Code = Code.replace("отчистить", """os.system("cls")""")
Code = "import time\nimport os\n" + Code
file = filedialog.asksaveasfilename(
defaultextension=".py",
filetypes=(("Файлы Python", "*.py"), ("Текстовые файлы", "*.txt"), ("Все файлы", "*.*")),
title="Сохранить файл"
)
if file:
try:
with open(file, 'w') as f:
f.write(Code)
print(f"Файл сохранен: {file}")
except Exception as e:
print(f"Ошибка при сохранении файла: {str(e)}")
# Функция выполнения кода
def run_code():
try:
# Получаем код из текстового поля
Code = ""
Code = text_area.get(1.0, tk.END)
if Python.get():
#Блокировка Python скриптов А
Code = Code.replace("if", "error")
Code = Code.replace("elif", "error")
Code = Code.replace("else", "error")
Code = Code.replace("while", "error")
Code = Code.replace("print", "error")
Code = Code.replace("input", "error")
Code = Code.replace("import", "error")
Code = Code.replace("time.sleep", "error")
Code = Code.replace("exit()", "error")
#Блокировка Python скриптов В
Code = Code.replace("If", "error")
Code = Code.replace("Elif", "error")
Code = Code.replace("Else", "error")
Code = Code.replace("While", "error")
Code = Code.replace("Print", "error")
Code = Code.replace("Input", "error")
Code = Code.replace("Import", "error")
Code = Code.replace("Time.sleep", "error")
Code = Code.replace("Exit()", "error")
#Активация Udaw скриптов A
Code = Code.replace("если", "if")
Code = Code.replace("цикл", "while")
Code = Code.replace("импорт", "import")
Code = Code.replace("выход", "raise KeyboardInterrupt()")
Code = Code.replace("ждать", "time.sleep")
Code = Code.replace("да", "True")
Code = Code.replace("нет", "False")
#Активация Udaw скриптов B
Code = Code.replace("Если", "if")
Code = Code.replace("Цикл", "while")
Code = Code.replace("Импорт", "import")
Code = Code.replace("Выход", "raise KeyboardInterrupt()")
os.system("cls")
# print(Code)
exec(Code)
Code=""
except KeyboardInterrupt:
print()
os.system("cls")
except Exception as e:
# Выводим ошибку в текстовое поле
print("Ошибка")
# Функция открытия окна справки
# Создаем главное окно
root = tk.Tk()
root.title("IDLE Udaw 0.2.0")
root.geometry("600x500")
full_screen = tk.BooleanVar()
dark_theme_var = tk.BooleanVar()
Python = tk.BooleanVar()
Python.set(True)
def fullscreen():
if full_screen.get():
root.state('zoomed')
else:
root.state('normal')
def update_fullscreen_state(event):
# Проверяем текущее состояние окна
if root.wm_state() == 'zoomed':
full_screen.set(True) # Ставим галочку
else:
full_screen.set(False) # Снимаем галочку
current_theme = theme_light # Начальная тема
# Функция переключения темы
def toggle_theme():
global current_theme
if current_theme == theme_light:
current_theme = theme_dark
else:
current_theme = theme_light
# Применяем тему к окну
root.config(bg=current_theme['bg'])
# Применяем тему к текстовому полю
text_area.config(
bg=current_theme['bg'],
fg=current_theme['fg'],
selectbackground=current_theme['selectbg'],
selectforeground=current_theme['selectfg']
)
# Применяем тему к меню
main_menu.config(
bg=current_theme['menu_bg'],
fg=current_theme['menu_fg'],
activebackground=current_theme['menu_active'],
activeforeground=current_theme['fg']
)
# Обновляем тему для главного меню и всех подменю
update_menu_theme(main_menu)
update_menu_theme(file_menu)
update_menu_theme(edit_menu)
update_menu_theme(view_menu)
update_menu_theme(help_menu)
def update_menu_theme(menu):
menu.config(
bg=current_theme['menu_bg'],
fg=current_theme['menu_fg'],
activebackground=current_theme['menu_active'],
activeforeground=current_theme['fg']
)
root.bind("<Configure>", update_fullscreen_state)
# Справочник Udaw
def help_window_Udaw():
help_window = tk.Toplevel(root)
help_window.title("Справка")
help_window.geometry("320x300")
# Создаем текстовый виджет для справки
help_text = scrolledtext.ScrolledText(
help_window,
width=50,
height=15,
font=("Consolas", 12)
)
help_text.pack(padx=10, pady=10)
# Вставляем текст справки
help_text.insert(tk.END, """Справочник Udaw:
вывод()
ввод()
ждать()
отчистить
выход
если ...:
цикл ...:
импорт ... (библиотеки Python)
Да=True
Нет=False""")
help_text.config(state=tk.DISABLED)
# Новости
def help_window_News():
help_window = tk.Toplevel(root)
help_window.title("Справка")
help_window.geometry("320x300")
# Создаем текстовый виджет для справки
help_text = scrolledtext.ScrolledText(
help_window,
width=50,
height=15,
font=("Consolas", 12)
)
help_text.pack(padx=10, pady=10)
# Вставляем текст справки
help_text.insert(tk.END, """IDLE Udaw 0.2.0!
1.Добавлен функционал всем кнопкам в верхней панели
2.Добавлена тёмная тема""")
help_text.config(state=tk.DISABLED)
# Добавляем текстовое поле с прокруткой
text_area = scrolledtext.ScrolledText( # Исправлено имя переменной
root,
width=80,
height=30,
font=("Consolas", 12)
)
text_area.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
#Создаем главное меню
main_menu = Menu(root)
root.config(menu=main_menu)
# Создаем подменю "Файл"
file_menu = Menu(main_menu, tearoff=0)
file_menu.add_command(label="Открыть", command=open_file)
file_menu.add_command(label="Сохранить", command=save_file)
file_menu.add_separator()
file_menu.add_command(label="Конвертировать в Python", command=convert)
file_menu.add_checkbutton(label="Блокировка Python", variable=Python)
file_menu.add_separator()
file_menu.add_command(label="Выход", command=root.quit)
# Добавляем подменю "Файл" в главное меню
main_menu.add_cascade(label="Файл", menu=file_menu)
# Создаем подменю "Правка"
edit_menu = Menu(main_menu, tearoff=0)
edit_menu.add_command(label="Копировать", command=copy)
edit_menu.add_command(label="Вставить", command=paste)
edit_menu.add_command(label="Вырезать", command=cut)
# Добавляем подменю "Правка" в главное меню
main_menu.add_cascade(label="Правка", menu=edit_menu)
# Создаем подменю "Вид"
view_menu = Menu(main_menu, tearoff=0)
view_menu.add_checkbutton(label="Полноэкранный режим", variable=full_screen, command=fullscreen)
view_menu.add_checkbutton(label="Темная тема", variable=dark_theme_var, command=toggle_theme)
# Добавляем подменю "Вид" в главное меню
main_menu.add_cascade(label="Вид", menu=view_menu)
# Добавляем подменю "Запустить" в главное меню
main_menu.add_cascade(label="Запустить", command=run_code)
# Добавляем подменю "Справка" в главное меню
help_menu = Menu(main_menu, tearoff=0)
help_menu.add_cascade(label="Справочник Udaw", command=help_window_Udaw)
help_menu.add_cascade(label="Новости", command=help_window_News)
# Добавляем подменю "Справка" в главное меню
main_menu.add_cascade(label="Справка", menu=help_menu)
# Запускаем основной цикл
root.mainloop()
Почему то если написать код с ввод()
или как в адекватном Python input()
то первый раз он срабатывает, но второй раз выдаёт ошибку, Что делать? Если между запусками код хоть немного изменять то он будет адекватно работать.