繁体   English   中英

我想在我的tkinter窗口中嵌入python控制台..我怎么能这样做?

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

我正在制作文本编辑器,并希望在我的应用程序中添加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()

这段代码是在所有python安装的idlelib文件夹下找到的pyshell.pyw

我搜索了idle.pyw,发现它使用了一个真正的shell程序pyshell。 那么我怎么能嵌入它。

我想要一个嵌入了python IDLE shell的Tkinter框架。请给出代码。 提前致谢。

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

idlelib实现了IDLE。 虽然您可以自由地使用它,但它是私有的,因为代码和接口可以在任何版本中更改,而不会出现通常的反向兼容性约束。 您自己导入并使用idlelib模块。

目前,Shell窗口是具有菜单和框架的Toplevel。 后者有一个文本和垂直滚动条。 无法在框架内(或在另一个Toplevel或root = Tk()内)可视地嵌入Toplevel。 top = Toplevel(myframe)可以工作,但top不能在myframe place d, pack ed或grid ded。

我希望将来能够重构editor.py和pyshell.py,以便将带有菜单的窗口与具有可滚动文本的框架分开。 结果应包括具有parent作为参数的可嵌入EditorFrame和ShellFrame类。 但那是在未来。

目前,可以使用import idlelib.idle从python中运行IDLE。 但是,因为它运行mainloop()(在它自己的根目录下),所以它会阻塞并且在所有IDLE窗口关闭之前不会完成。 这可能不是人们想要的。

如果在单独的窗口中运行Shell是可以接受的,可以从python.main中提取运行Shell所需的10-20行。 需要进行一些实验。 如果主应用程序使用tkinter,则此函数应将应用程序的root作为参数,而不是调用mainloop()。

Tcl有Tkcon.tcl。 当每个线程源(意味着运行/执行)Tkcon.tcl时,每个线程都会弹出一个Tk shell / Tk console / tkcon.tcl非常好的调试思路。 并通过线程单独打印消息。 Python有idle.py ...以及如何使用它? 仍然找到了这个例子。 是相同的Tk基地。 为什么找不到合适的例子? 到目前为止......继续寻找......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM