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 ):
    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")
于 2012-11-08T08:21:07.520 に答える