You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中TypeError: __init__()缺失必填参数'master'问题咨询

问题分析与修复

你遇到的__init__() missing 1 required positional argument: 'master'错误,根源是按钮点击时直接调用mulai类但没有传入必需的master参数,同时代码里还有其他几个拼写和逻辑错误,我来逐个拆解:

核心错误:command绑定错误

在minigame类的按钮定义中:

self.b4=Button(self.master,text="start",command=mulai)

这里直接把mulai类名赋值给command,点击按钮时Python会尝试执行mulai(),但mulai的__init__方法要求必须传入master参数,自然会报错。

修复方法:用lambda表达式包装,传入当前的master:

self.b4=Button(self.master,text="start",command=lambda: mulai(self.master))

其他代码错误与修复

1. 拼写错误导致的属性引用失败

在mulai类的asal方法里:

self.masteer.withdraw()  # 拼写错误:masteer → win

你初始化时把传入的master赋值给了self.win,所以应该改成:

self.win.withdraw()

2. 方法参数不匹配

你在asal里调用self.radi(self.tk),但radi方法没有定义参数,导致调用报错。需要给radi添加parent参数(接收传入的Toplevel窗口):

def radi(self, parent):
    # 后续控件都使用parent作为父容器

3. IntVar的初始化与引用错误

  • start方法里的str(var.get())应该改为str(self.var.get()),因为var是实例属性self.var,不是局部变量;
  • radi方法里的var=self.start是错误的,应该先初始化self.var = IntVar(),再绑定到Radiobutton;

4. 控件父容器错误

radi方法里的Radiobutton和Label都错误地使用了self.master,但mulai类中并没有定义self.master,应该使用传入的parent(也就是我们创建的Toplevel窗口)。

完整修正后的代码

from tkinter import*

class minigame():
    def __init__(self,master):
        self.master=master
        self.master.title("try")
        self.lbl1=Label(self.master)
        self.lbl1['text']="User Name"
        self.lbl1.grid(row=1,column=1)
        self.txt1=Entry(self.master)
        self.txt1['width']=30
        self.txt1.grid(row=1,column=2)
        # 修复command绑定问题
        self.b4=Button(self.master,text="start",command=lambda: mulai(self.master))
        self.b4.grid(row=2,column=2)

class mulai():
    def __init__(self,master):
        self.win=master
        self.win.title('MINIGAME')
        self.asal()

    def asal(self):
        # 拼写修复:masteer → win
        self.win.withdraw()
        self.tk=Toplevel(self.win)
        # 传入Toplevel窗口给radi方法
        self.radi(self.tk)

    def start(self):
        # 引用实例属性self.var
        self.pilihan="Anda Menjawab " + str(self.var.get())
        # 可以添加打印或者显示逻辑,比如:
        print(self.pilihan)

    def radi(self, parent):
        # 初始化IntVar作为实例属性
        self.var=IntVar()
        # 使用parent作为父容器,绑定self.var
        rb1=Radiobutton(parent,text="Martha",variable=self.var,value=0,command=self.start)
        rb1.grid(row=1)
        rb2=Radiobutton(parent,text="Kula Diamond",variable=self.var,value=1,command=self.start)
        rb2.grid(row=2)
        self.label=Label(parent,text="WHO IS THE BEST WAIFU?")
        self.label.grid(row=0)

if __name__ == '__main__':
    root=Tk()
    app=minigame(root)
    root.mainloop()  # 补充主循环,避免窗口一闪而过

内容的提问来源于stack exchange,提问作者Yen Fei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:58:10