Python:从ttk.Frame继承时不能使用关键字参数

时间:2017-02-08 18:26:36

标签: python inheritance tkinter keyword-argument

我正在尝试创建ttk.Frame对象的子类,但我注意到我无法将关键字参数传递到其父级的init方法中。这是我班级的精简版:

from tkinter import ttk

class MyFrame(ttk.Frame):
    def __init__(self, parent, **kwargs):                    
        super(MyFrame, self).__init__(parent, kwargs)

以下是尝试创建我的类实例(root分配给tkinter.Tk())的示例:

my_frame = MyFrame(root, borderwidth=5)

当我尝试创建我的类的实例时,这是错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\csmith\Documents\tmp\frame_test.py", line 5, in __init__
ttk.Frame.__init__(self, parent, kwargs)
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given

我知道在使用关键字参数时可以创建Frame对象,但我似乎无法弄清楚为什么我不能创建一个将其关键字参数传递给Frame的init方法的类。任何建议表示赞赏!

1 个答案:

答案 0 :(得分:1)

kwargs传递给某个函数时,请改用**kwargs。这意味着将其解包为kwargs&#39;,因为您必须逐个放置所有kwargs。 &#39;解压缩&#39;意味着Python会为你做到这一点。

更改

super(MyFrame, self).__init__(parent, kwargs)

super(MyFrame, self).__init__(parent, **kwargs)