我正在制作文本编辑器,并想在我的应用程序中添加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外壳的Tkinter框架,请提供代码。预先感谢。
答案 0 :(得分:2)
Stackoverflow不是代码编写服务。相反,其目的是帮助您编写代码。通常最好是在问一个问题之前先写一些代码,但是在这种情况下,您会在编码之前陷入困境。
idlelib实现IDLE。尽管您可以自由使用它,但是它是私有的,因为代码和接口可以在任何发行版中更改,而没有通常的向后兼容性约束。自行输入并使用idlelib模块。
当前,Shell窗口是具有菜单和框架的顶层。后者具有文本和垂直滚动条。无法以视觉方式将Toplevel嵌入到框架中(或另一个Toplevel或root = Tk())。 top = Toplevel(myframe)
有效,但不能在top
中place
,pack
或grid
删除myframe
。
我希望将来能够重构editor.py和pyshell.py,以便将带有菜单的窗口与带有可滚动文本的框架分开。结果应包括以parent
作为参数的可嵌入EditorFrame和ShellFrame类。但这是将来。
当前,可以使用import idlelib.idle
从python内部运行IDLE。但是,因为它运行mainloop()(在其自己的根目录上),所以它将阻塞并且直到关闭所有IDLE窗口后才会结束。这可能不是人们想要的。
如果可以在单独的窗口中运行Shell,则可以从python.main中提取仅运行Shell所需的10-20行。需要进行一些实验。如果主应用程序使用tkinter,则此函数应将应用程序的根作为参数,并 not 调用mainloop()。
答案 1 :(得分:0)
Tcl具有Tkcon.tcl。当每个线程源(表示运行/执行)时,Tkcon.tcl 每个线程都会弹出一个Tk shell / Tk控制台/tkcon.tcl,非常适合调试。并分别通过线程打印消息。 Python有idle.py ...以及如何使用它?仍在寻找例子。 都是相同的Tk基数。为什么找不到合适的例子?到目前为止...继续寻找...