子类化 Tkinter.Tcl

Posted

技术标签:

【中文标题】子类化 Tkinter.Tcl【英文标题】:Subclassing Tkinter.Tcl 【发布时间】:2012-10-28 06:50:04 【问题描述】:

我想扩展 Tkinter.Tcl 的行为。我尝试对它进行子类化,但事实证明 Tcl 是一个返回对象的工厂函数。如果 Tcl 是一个类,我会:

from Tkinter import *
class TclPlus(Tcl): # <- broken
    def foo(self, *args, **kwargs):
       print "foo"

我可以将 Tk 子类化,并且我的新类将具有 Tcl 工厂函数,但我会回到我开始的地方。此外,Tk 包括所有窗口开销,我不需要。

最好的方法是什么?

编辑:http://code.activestate.com/recipes/52295-automatic-delegation-as-an-alternative-to-inherita/ 这似乎正是我所追求的。评论?

【问题讨论】:

【参考方案1】:

如果您查看Tcl 函数的内部,您会看到一个有趣的标志,用于创建Tk 实例

def Tcl(screenName=None, baseName=None, className='Tk', useTk=0): return Tk(screenName, baseName, className, useTk)

因此,您可以继承 Tk 并禁止 Tk 实例化

class TclPlus(Tk):
    def __init__(self):
        Tk.__init__(self,useTk=0)


tcl = TclPlus()
tcl.eval("expr 6*7")

【讨论】:

是的。我发现了这一点,现在正着手更新这个问题。谢谢。我的操作系统有 _tkinter.so 单独打包。尽管多次阅读 Tkinter 是 python 的一部分,但我一直在寻找那个包中的 python 源代码。

以上是关于子类化 Tkinter.Tcl的主要内容,如果未能解决你的问题,请参考以下文章

CAsyncSocket 没有子类化?

子类化导航控制器有啥用? [关闭]

麻烦子类化 SCNScene

UIViewController 的 Swift 子类化子类

子类化 UIAlertController

子类化 UItableViewCell 选择