2

我想扩展 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/这似乎正是我所追求的。注释?

4

1 回答 1

0

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

def Tcl(screenName=None, baseName=None, className='Tk', useTk=0 ):
    返回 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")
于 2012-11-08T08:21:07.520 回答