CustomTkinter框架类初始化报错:意外关键字参数'master'
问题解决:init() got an unexpected keyword argument 'master'
问题原因
你自定义的inputs类继承自ctk.CTkFrame,但它的__init__方法既没有接收master参数,也没有将父容器参数传递给父类的构造函数。当你在主文件中传入master=self.frame_right创建实例时,类的构造函数无法识别这个参数,因此抛出错误。
修复方案
修改inputs类的构造函数,添加master参数并传递给父类:
import customtkinter as ctk class inputs(ctk.CTkFrame): def __init__(self, master=None): # 添加master参数,设置默认值None super().__init__(master=master) # 将master传递给父类CTkFrame的构造函数 self.label_1 = ctk.CTkLabel(self, text="Incident Wave Inputs", text_font=("Roboto Medium", -24,)) self.label_1.grid(row=1, column=0, columnspan=2, sticky='W', pady=10, padx=10) self.label_2 = ctk.CTkLabel(self, text="Wave Height (H) = ", text_font=("Roboto Medium", -16)) self.label_2.grid(row=2, column=0, sticky='W', pady=10, padx=10) self.label_3 = ctk.CTkLabel(self, text="Water Depth (d) = ", text_font=("Roboto Medium", -16)) self.label_3.grid(row=3, column=0, sticky='W', pady=10, padx=10) self.label_4 = ctk.CTkLabel(self, text="Wave Period (T) = ", text_font=("Roboto Medium", -16)) self.label_4.grid(row=4, column=0, sticky='W', pady=10, padx=10) self.label_5 = ctk.CTkLabel(self, text="Wave Angle (α) = ", text_font=("Roboto Medium", -16)) self.label_5.grid(row=2, column=2, sticky='E', pady=10, padx=10) self.label_6 = ctk.CTkLabel(self, text="Bed Slope (s) = ", text_font=("Roboto Medium", -16)) self.label_6.grid(row=3, column=2, sticky='E', pady=10, padx=10) self.label_7 = ctk.CTkLabel(self, text="Depth of Interest (z) = ", text_font=("Roboto Medium", -16)) self.label_7.grid(row=4, column=2, sticky='E', pady=10, padx=10) self.entry2 = ctk.CTkEntry(self, placeholder_text="meter", width=120, height=25, border_width=2, corner_radius=10) self.entry2.grid(row=2, column=1, sticky='W', pady=10, padx=10) self.entry3 = ctk.CTkEntry(self, placeholder_text="meter", width=120, height=25, border_width=2, corner_radius=10) self.entry3.grid(row=3, column=1, sticky='W', pady=10, padx=10) self.entry4 = ctk.CTkEntry(self, placeholder_text="second", width=120, height=25, border_width=2, corner_radius=10) self.entry4.grid(row=4, column=1, sticky='W', pady=10, padx=10) self.entry5 = ctk.CTkEntry(self, placeholder_text="degree", width=120, height=25, border_width=2, corner_radius=10) self.entry5.grid(row=2, column=3, sticky='W', pady=10, padx=10) self.entry6 = ctk.CTkEntry(self, placeholder_text="meter/meter", width=120, height=25, border_width=2, corner_radius=10) self.entry6.grid(row=3, column=3, sticky='W', pady=10, padx=10) self.entry7 = ctk.CTkEntry(self, placeholder_text="- meter", width=120, height=25, border_width=2, corner_radius=10) self.entry7.grid(row=4, column=3, sticky='W', pady=10, padx=10) self.button_6 = ctk.CTkButton(self, text="Calculate", command=self.button_event) self.button_6.grid(row=5, column=0, pady=10, padx=10, sticky="W") def button_event(self): print("Button pressed")
说明
- 添加
master=None参数后,既可以在创建实例时显式传入父容器(如你主文件中的wave_prop.inputs(master=self.frame_right)),也可以不传入参数(此时使用默认的父容器)。 - 调用
super().__init__(master=master)将父容器传递给CTkFrame的构造函数,这样inputs框架就会正确挂载到frame_right下,实现框架嵌套的需求。
内容的提问来源于stack exchange,提问作者Said Lababidi
相关产品推荐
相关产品推荐

