从班级内部调用Button控制器' __在里面__

时间:2015-06-04 00:39:28

标签: python class python-2.7 tkinter

我的GUI程序使用了许多具有一些非常特殊功能的按钮,因此我编写了一个围绕按钮包装这些方法的类,因此我不需要为每个按钮重写简单的函数按钮。我有课:

class ToggleableButton(Button):     
    __isToggled = False
    __root = None
    __bindMap = []

    # how do I correctly structure the init ?
    def __init__(self, master=None, cnf={}, **kw):
        Button.__init__(self, master, cnf, kw)

    def bind(self, root, bindKey, func):
        # doing stuff

    def Toggle(self, toggle=False):
        # doing stuff

我希望能够创建对象,就像我创建一个按钮一样:

drawButton = ToggleableButton(frame, image=img, width=30, command=func)
drawButton = ToggleableButton(frame, image=anotherimg)

如何声明类__init__方法来模仿按钮?目前,如果我写test = ToggleableButton(frame, text="hi", width=10, command=func),我将收到错误:

tools.py, line 59, in __init__
    Button.__init__(self, master, cnf, kw)
TypeError: __init__() takes at most 3 arguments (4 given)

1 个答案:

答案 0 :(得分:2)

您需要应用(splat)额外的关键字参数:

Button.__init__(self, master, cnf, **kw)
                                   ^^

否则,您将整个kw dict作为单个位置参数传递。这会引发错误,因为Button.__init__只接受三个位置参数(selfmastercnf),而不是四个。