我正在尝试创建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方法的类。任何建议表示赞赏!
答案 0 :(得分:1)
将kwargs
传递给某个函数时,请改用**kwargs
。这意味着将其解包为kwargs
&#39;,因为您必须逐个放置所有kwargs
。 &#39;解压缩&#39;意味着Python会为你做到这一点。
更改
super(MyFrame, self).__init__(parent, kwargs)
到
super(MyFrame, self).__init__(parent, **kwargs)