我需要在tkinter程序中嵌入一个python解释器。谁能帮助我解决如何集成它?

我已经看过main()函数,但是它可以满足我的需求,但是我似乎无法在不破坏它的情况下减少它。

最佳答案

您必须执行的某些详细信息可能取决于您在运行IDLE的Shell后要执行的操作。我想进一步了解。但是,让我们从简单开始,对pyshell.main进行最小的更改,使其与其他代码一起运行。

请注意,在下文中使用的3.6中,PyShell.py重命名为pyshell.py。另请注意,此处的所有内容均构成使用IDLE的私有内部组件,并且“使用风险自负”。

我假设您想在与tkinter代码相同的进程(和线程)中运行Shell。将签名更改为

def main(tkroot=None):


将根创建(查找# setup root)更改为

if not tkroot:
    root = Tk(className="Idle")
    root.withdraw()
else:
    root = tkroot


在当前的3.6版本中,if not tkroot下还有两行需要缩进:

    if use_subprocess and not testing:
        NoDefaultRoot()


保护mainloop并销毁(最后)

if not tkroot:
    while flist.inversedict:  # keep IDLE running while files are open.
        root.mainloop()
    root.destroy()
# else leave mainloop and destroy to caller of main


上面将根窗口的“依赖注入”添加到函数中。我可能会在3.6中添加它,以简化测试(“其他代码”的示例)。

现在,以下tkinter程序运行,同时显示根窗口和IDLE shell。

from tkinter import *
from idlelib import pyshell

root = Tk()
Label(root, text='Root id is '+str(id(root))).pack()
root.update()
def later():
    pyshell.main(tkroot=root)
    Label(root, text='Use_subprocess = '+str(pyshell.use_subprocess)).pack()

root.after(0, later)
root.mainloop()


您应该可以随时调用pyshell.main。

关于python - 如何使用idlelib.PyShell将解释器嵌入tkinter程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38977525/

10-12 17:44