【问题标题】:tkinter: Is it possible to use native Tcl/Tk tklib's ctext widget?tkinter:是否可以使用本机 Tcl/Tk tklib 的 ctext 小部件?
【发布时间】:2017-12-05 12:37:08
【问题描述】:

我遇到了一个有趣的小部件 (source code),它似乎支持语法高亮和其他一些东西。我想在我的 tkinter 应用程序中使用它,但是我不确定这是否完全有可能。我知道您可以使用tkinter.eval() 来评估原始 Tcl/Tk 代码,但我不确定在评估整个源代码/将其放置在某个地方之后应该做什么 - 我如何实例化小部件并实际使用是吗?

【问题讨论】:

  • 你可以打开tkinter源代码(代码import tkinter ; print(tkinter.__file__)的路径)看看它是如何工作的。
  • 是的,这是可能的。 Tkinter 只不过是 tcl/tk 代码的薄包装,而 ctext 只是更多的 tcl/tk 代码。
  • @BryanOakley:你介意创建一个小例子吗?
  • @mentalita:是的,我介意。这将是很多工作,我没有时间去做。 stackoverflow 不是免费的编码服务。我建议你从一个只有几行代码的 .tcl 文件开始,然后弄清楚如何在 tkinter 中使用它。一旦你弄清楚了,你可以尝试包含这个小部件。
  • @BryanOakley:如果工作量很大——当然,不用担心。无论如何,没有必要认真对待它并被冒犯或使用“免费编码服务”的论点。还是谢谢。

标签: python tkinter tcl tk


【解决方案1】:

我碰巧有 ctext 的源代码(它是 tklib 的一部分),所以我可以让我的 Tcl 库知道使用 TCLLIBPATH 环境变量的附加包位置。然后就可以加载了。但是,你需要做一些与 python 的接口

pat@uknml7167 ~ $ TCLLIBPATH=/opt/src/tklib/modules python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tkinter as tk
>>> root = tk.Tk()
>>> root.tk.call('package','require','ctext')
'3.3'

所以简短的回答是“是”。

这个网站上有一个tkribbon 的例子。我确信有更好的使用原生 Tk 包的例子。

基于上述的快速演示:

class Ctext(tk.Widget):
    def __init__(self, master):
        tk.Widget.__init__(self, master, 'ctext')

ctext = Ctext(root)
ctext.pack(expand=True, fill='both')

一个 tkinter 包装类已经上传到 github 以及一个小演示脚本。

【讨论】:

  • 酷,谢谢。我会看一下这个例子,我相信创建一个小的 Python 包装器应该不会太费力/太难。
  • 另外,请问您是怎么​​“碰巧拥有它”的?更具体地说,我问我应该把它放在我的电脑上的什么地方,因为它目前找不到它。我的/opt/ 根本没有src。我在这里错过了什么?
  • 我从 Tk 化石存储库中克隆了它,因为我有时会进行 Tk 维护。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多