Найти тему
NasingFaund

As to create your's Own Python IDE (Как создать собственную IDE Питона)

begin===>>>17.17MSK 12.01.2023 Уж не знаю насколько длинная история получится, как грится как фишка ляжет.

Кароче решил поразвлечься в Новый Год (2023)  и для фана написать редактор кода Питона. Чисто игрушечный в пару строк.

Написал, хотя хотел за 5 минут. За 5 не получилось. Заманался с subprocess.

Но в итоге получилась вот такая морда:

Не люблю светлые морды, эта темно-синяя получилась. Верхнее окно редактор кода, в нижнем окне вывод интерпретатора: результат и ошибки если есть.
Не люблю светлые морды, эта темно-синяя получилась. Верхнее окно редактор кода, в нижнем окне вывод интерпретатора: результат и ошибки если есть.

Код сейчас выложу на github.com

А вот как собственно выглядит исходный код tkEDI (рабочее название проекта) в собственном интерфейсе, вывод результата и ошибок присутствует. Собсно запустив код (run) появилось еще одно редактора (здесь не показал его). Экзешник (tkEDI.exe) проекта щас выложу на гитхаб.
А вот как собственно выглядит исходный код tkEDI (рабочее название проекта) в собственном интерфейсе, вывод результата и ошибок присутствует. Собсно запустив код (run) появилось еще одно редактора (здесь не показал его). Экзешник (tkEDI.exe) проекта щас выложу на гитхаб.

19.40MSK 12.01.2023 код выложен на гитхаб (https:/github.com)

Ну и сюда попробую выложить. Хотел изначально на хабр выложить статью и код. Но потом чой-то пока не хочется. И не уверен, что заставлю себя. Надо думать. Как грится codeproject.com тоже неплохой сайт.

Полный код игрушки (хотя, как-то странно он тут выглядит, но что есть):

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

from tkinter import Tk, Menu, Text, END, BOTH, Toplevel, Label

from tkinter.filedialog import asksaveasfilename, askopenfilename

import subprocess

import os

###################################################

# main window (wnd) & functons (code block 1)

###################################################

wnd = Tk()

wnd.title('tkIDE_pre_finish_version: 0.1.0 data:11.01.2023 17.46MSK')

file_path = ''

def set_file_path(path):

global file_path

file_path = path

def open_file(): ### function fo open .py file

path = askopenfilename(filetypes=[('Python Files', '*.py')])

with open(path, 'r') as file: ### open file for read

code = file.read() ### read

edi.delete('1.0', END) ### clear edi window (edi == editor)

edi.insert('1.0', code) ### insert code from file to ede window

set_file_path(path) ### set where our file is

def save_as(): ### s

if file_path == '': ### if NO file's path ==>> set path

path = asksaveasfilename(filetypes=[('Python Files', '*.py')])

else:

path = file_path ### else use path

with open(path, 'w') as file: ### open file im write regime

code = edi.get('1.0', END) ### data from begin to end in edi window

file.write(code) ### write data to file

set_file_path(path)

def run(): ### 'run' function for py code

co_res.delete("1.0", "end") ### clear 'co_res' window ('co_res' from 'code result')

co_res.config(fg='white') ### set color text

if file_path == '': ### if code NOT save to file!!! Need to save it first!!!

save_prompt = Toplevel() ### Toplevel window (vsplivaushee okno)

text = Label(save_prompt, text='Please save your code') ### show message in Toplevel window

text.pack() ### pack Toplevel window with main window (wnd)

return

command = f'python {file_path}'  ###create command from file path

process = subprocess.Popen(['cmd.exe', '/k', command],
stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

output = None

error = None

output, error = process.communicate() ### poluchaem values from process (output, error)

co_res.insert(END, os.getcwd()) ### show in window our work directory

co_res.insert(END, '\>')

co_res.insert(END, '\n')

co_res.insert(END, 'output:')

co_res.insert(END, '\n')

co_res.insert(END, output)

co_res.insert(END, '\n')

co_res.insert(END, 'error:')

co_res.insert(END, '\n')

if error == b'':

co_res.config(fg='green') ### normal text color

co_res.insert(END, 'No errors') ### show that text if errors NO!!!

else:

co_res.config(fg='red') ### error text color

co_res.insert(END,  error) ### show error text

def exit():

wnd.quit()

###################################################

# menu (code block 2)

###################################################

menu_bar = Menu(wnd) ### create menu bar

file_menu = Menu(menu_bar, tearoff=0)

file_menu.add_command(label='Open', command=open_file)

file_menu.add_command(label='Save', command=save_as)

file_menu.add_command(label='Save As', command=save_as)

file_menu.add_command(label='Run', command=run)

file_menu.add_command(label='Exit', command=exit)

menu_bar.add_cascade(label='File', menu=file_menu)

menu_bar.add_command(label='Run', command=run)

wnd.config(menu=menu_bar)

###################################################

# edi window (code block 3)

###################################################

edi = Text()

Font_tuple = ("Courier", 12, "normal")

edi.configure(font=Font_tuple)

edi.config(fg='white')

edi.config(bg='#060b24')

edi.pack(expand=1, fill=BOTH)

###################################################

# co_res window (code block 4)

###################################################

co_res = Text(height=12, fg='white')

Font_tuple = ("Courier", 12, "normal")

co_res.configure(font=Font_tuple)

co_res.config(bg='#060b24')

co_res.pack(expand=1, fill=BOTH)

wnd.mainloop() #### Super Top Command!!!!

###

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::EOF

Как писался код:

А. Взят Виндовс, Питон3, tkinter.

Б. Искались образцы кода, кто-что делал на tkinter, IDE, text & code editors, other...

В. Окно редактора должно было быть вверху большое, терминал вывода внизу (поменьше по высоте, ширина одинаковая с окном редактора)

Г. Терминал хотел сделать совмещенный (Windows Commant Prompt == cmd.exe & Python Shell). Пока только эмулятор терминала. Команды ни cmd, ни Python Shell в него вводить нельзя (пока не работают)

Д. Нумерации строк, подстветки кода, линтера пока тоже нет.

В процессе работы использовались (но не пострадали):

  1. Тетя Яна (https://ya._ru), 
  2. Стаковерфлоу https://stackoverflow._com

Благодарности всем питонячим кодерам. Если у кого-то что-то и взял, то явно переработал с энтузиазмом и энергией.

Всех, сорян, не упомню. Смотрите ссылки выше.

Код написан очень просто. Иногда специально суперпросто (можно было сократить, но не стал).

Вшил комменты (сорян, инглиш).

Если что непонятно — пишите.

По-моему код проще уже некуда.

Всем пис, добра. Ваш насингфаунд. 21.07MSK 12.01.2023

P.S. Хотел писать статью. А чО тут писать все проще пареной репы.

#Python

#Python IDE

#IDE

#code editor

#tkEDI