Я хочу встроить консоль Python в мое окно tkinter .. Как я могу это сделать? - PullRequest
3 голосов
/ 16 мая 2019

Я делаю текстовый редактор и хочу добавить функцию IDLE в мое приложение. Поэтому я хочу, чтобы в нем был встроен фрейм Python IDLE со всеми меню и функциями, которые дает оригинальный Python IDLE.

Я посмотрел в источнике простоя lib, но не могу найти решение.

    try:
    import idlelib.pyshell
except ImportError:
    # IDLE is not installed, but maybe pyshell is on sys.path:
    from . import pyshell
    import os
    idledir = os.path.dirname(os.path.abspath(pyshell.__file__))
    if idledir != os.getcwd():
        # We're not in the IDLE directory, help the subprocess find run.py
        pypath = os.environ.get('PYTHONPATH', '')
        if pypath:
            os.environ['PYTHONPATH'] = pypath + ':' + idledir
        else:
            os.environ['PYTHONPATH'] = idledir
    pyshell.main()
else:
    idlelib.pyshell.main()

Этот код файла pyshell.pyw находится в папке idlelib во всех установках Python

Я искал idle.pyw и обнаружил, что он использует программный pyshell, который является настоящей оболочкой. Так, как я могу вставить это.

Мне нужна рамка Tkinter с встроенной в нее оболочкой Python IDLE. Пожалуйста, дайте код. Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 16 мая 2019

Stackoverflow не является службой написания кода.Скорее цель состоит в том, чтобы помочь вам написать код.Обычно лучше написать код перед тем, как задать вопрос, но в этом случае вы застряли перед кодированием.

idlelib реализует IDLE.Хотя вы можете использовать его в противном случае, он является закрытым в том смысле, что код и интерфейсы могут меняться в любом выпуске без обычных ограничений обратной совместимости.Импортируйте и используйте модули idlelib на свой вкус.

В настоящее время окно оболочки представляет собой Toplevel с меню и фреймом.Последний имеет текстовую и вертикальную полосу прокрутки.Невозможно визуально встроить Toplevel в рамку (или в другой Toplevel или root = Tk ()).top = Toplevel(myframe) работает, но top не может быть place d, pack ed или grid ded в пределах myframe.

Я надеюсь в будущем провести рефакторинг edit.py и pyshell.py, чтобы отделить окно с меню от фрейма с прокручиваемым текстом.Результат должен включать встраиваемые классы EditorFrame и ShellFrame, которые имеют parent в качестве аргументов.Но это в будущем.

В настоящее время можно запустить IDLE из питона с помощью import idlelib.idle.Однако, поскольку он запускает mainloop () (в своем корне), он блокируется и не завершает работу, пока все окна IDLE не будут закрыты.Это может быть не то, что нужно.

Если допустимо запускать Shell в отдельном окне, можно извлечь из python.main 10-20 строк, необходимых для запуска Shell.Некоторые эксперименты будут необходимы.Если основное приложение использует tkinter, эта функция должна получить корень приложения в качестве аргумента и не вызывать mainloop ().

0 голосов
/ 25 июля 2019

Tcl, имеющий Tkcon.tcl. когда каждый поток источника (означает запустить / exec) Tkcon.tcl каждый поток будет вызывать Tk shell / Tk console / tkcon.tcl, очень хорошая идея для отладки. и распечатать сообщение индивидуально по теме. Python, имеющий idle.py ... и как его использовать? все еще выясняю пример. Это та же база Tk. почему не можете найти подходящий пример? пока ... продолжай находить ...

...