Python Tkinter调用带参自定义Button类触发参数数量错误
问题原因
tk.Button的构造函数签名为Button(master=None, **kw),仅接受1个位置参数(master),其余配置项需以关键字参数传入。你在调用SubmitButton(self.window_frame_1, 10, 130)时,将10和130作为位置参数传递,加上类实例化时自动传入的self,总共向Button的__init__传递了4个位置参数,超出了允许的范围,因此触发TypeError。
输入字段类能正常运行,大概率是因为该类被重写时额外处理了位置参数,而SubmitButton类未做相同处理。
解决方案
根据你的需求,有两种可行的处理方式:
方式1:不重写SubmitButton,改用单独调用布局方法
如果不需要在SubmitButton内部封装布局逻辑,创建实例后单独调用布局方法(比如place/pack/grid):
# 创建按钮实例 submit_btn = SubmitButton(self.window_frame_1) # 调用布局方法设置位置 submit_btn.place(x=10, y=130)
方式2:重写SubmitButton的__init__方法,整合布局参数
如果希望将位置参数整合到实例化过程中,重写__init__方法,接收额外参数并内部处理布局:
import tkinter as tk class SubmitButton(tk.Button): def __init__(self, master, x, y, **kwargs): # 先调用父类构造函数初始化按钮 super().__init__(master, **kwargs) # 内部调用布局方法设置位置 self.place(x=x, y=y) # 此时调用方式就符合你的需求了 SubmitButton(self.window_frame_1, 10, 130)
额外注意
如果10和130不是布局位置,而是按钮的其他属性(比如宽度、高度),需要改为对应的关键字参数传递,例如:
SubmitButton(self.window_frame_1, width=10, height=130)
内容的提问来源于stack exchange,提问作者Ovidiu
相关产品推荐
相关产品推荐

