gpt4 book ai didi

python - 如何使用 idlelib.PyShell 将解释器嵌入到 tkinter 程序中?

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:07 25 4
gpt4 key购买 nike

我需要在我的 tkinter 程序中嵌入一个交互式 python 解释器。谁能帮我看看如何整合它?

我已经看过 main() 函数,但它对我的需求来说太复杂了,但我似乎无法在不破坏它的情况下减少它。

最佳答案

您必须执行的操作的一些细节可能取决于您在运行 IDLE 的 Shell 后要执行的操作。我想知道更多。但是让我们从简单开始,对 pyshell.main 进行最少的更改以使其与其他代码一起运行。

请注意,在我下面使用的 3.6 中,PyShell.py 已重命名为 pyshell.py。另请注意,此处的所有内容都相当于使用 IDLE 的私有(private)内部结构,并且“使用风险自负”。

我假设您想在与您的 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()

保护主循环并销毁(最后)

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

上面添加了根窗口的“依赖注入(inject)”到函数中。我可能会在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com