子类化Tkinter.Tcl

时间:2012-11-08 05:15:47

标签: python oop tkinter subclassing

我想扩展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 个答案:

答案 0 :(得分:0)

如果查看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")