我想在我的 tkinter window 中嵌入 python 控制台。我该怎么做?

I want to embed python console in my tkinter window.. How can i do it?

我正在制作一个文本编辑器,想在我的应用程序中添加 IDLE 功能。所以我想要一个嵌入 python IDLE 的框架,其中包含原始 python IDLE 提供的所有菜单和功能。

我查看了空闲库的来源,但找不到解决方案。

    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 在所有 python 安装

的 idlelib 文件夹下找到的

我搜索了 idle.pyw,发现它使用的程序 pyshell 是真实的 shell。那我怎么嵌入呢。

我想要一个 python IDLE shell 嵌入 it.Please 的 Tkinter 框架,请提供代码。提前致谢。

Whosebug 不是代码编写服务。相反,目的是帮助 编写代码。通常最好先写一些代码再问问题,但在这种情况下,你在编码之前就卡住了。

idlelib 实现了 IDLE。虽然您可以自由使用它,但它是私有的,因为代码和接口可以在任何版本中更改而没有通常的 back-compatibility 约束。随意导入和使用 idlelib 模块。

目前,Shell window 是带有菜单和框架的顶层。后者有一个文本和垂直滚动条。不可能在框架内(或在另一个 Toplevel 或 root = Tk())内直观地嵌入 Toplevel。 top = Toplevel(myframe) 有效,但 top 不能 placed、packed 或 gridded myframe.

我希望将来重构editor.py和pyshell.py,以便将带有菜单的window与带有可滚动文本的框架分开。结果应包括可嵌入的 EditorFrame 和 ShellFrame 类,它们具有 parent 作为参数。但那是以后的事情了。

目前,可以 运行 在 python 中使用 import idlelib.idle 空闲。但是,因为这个 运行s mainloop()(在它自己的根上),它会阻塞并且直到所有 IDLE windows 都关闭才完成。这可能不是一个人想要的。

如果 Shell 运行 在单独的 window 中是可以接受的,那么可以从 python.main 中提取仅 运行 所需的 10-20 行Shell。需要进行一些实验。如果主应用程序使用 tkinter,此函数应将应用程序的根目录作为参数,并且 调用 mainloop()。

Tcl 有 Tkcon.tcl 。当每个线程源(意味着run/exec)Tkcon.tcl 每个线程都会弹出一个 Tk shell/Tk console/tkcon.tcl 调试的好主意。并按线程单独打印消息。 Python 有 idle.py ... 以及如何使用它?仍然找出例子。 它们是相同的 Tk 基础。为什么找不到合适的例子?到目前为止...继续寻找...