Python:\uuuu init\uuuu()接受2个位置参数,但给出了3个

Python:\uuuu init\uuuu()接受2个位置参数,但给出了3个,python,tkinter,typeerror,Python,Tkinter,Typeerror,我试图用Tkinter创建一个简单的UI,但遇到了一个问题。我的代码如下所示: class UIController(tk.Tk): def __init__(self, master=None): tk.Frame.__init__(self, master) container = tk.Frame(self) container.pack(side="top", fill="both", expand=True) se

我试图用Tkinter创建一个简单的UI,但遇到了一个问题。我的代码如下所示:

class UIController(tk.Tk):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        self.frames = {}
        for F in (StartPage, BrowsePage, StudentPage):
            frame = F(self, container)
            self.frames[F] = frame
            frame.title("StudyApp")
        self.showFrame(StartPage)
        self.centerWindow()

    def showFrame(self, c):
        frame = self.frames[c]
        frame.tkraise()

    def centerWindow(self):
        w = 300
        h = 350
        sw = self.master.winfo_screenwidth()
        sh = self.master.winfo_screenheight()
        x = (sw - w)/2
        y = (sh - h)/2
        self.master.geometry('%dx%d+%d+%d' % (w, h, x, y))

class StartPage(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.pack()

        self.L1 = Label(self, text="Search by credits:")
        self.L1.place(x=18, y=45)

        self.startYear = Entry(self, bd=2)
        self.startYear.place(x=20, y=70)
        self.startYear.bind("<Return>", View.enter(startYear.get()))

        self.quitButton = Button(self, text="Quit", command=sys.exit)
        self.quitButton.pack(side="bottom", padx=5, pady=5, fill=X)

        self.searchButton = Button(self, text="Search")
        self.searchButton.pack(side="bottom", padx=5, pady=0, fill=X)   

class BrowsePage(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)

class StudentPage(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)

root = tk.Tk()
root.resizable(width=False, height=False)
uicontrol = UIController(root)
root.mainloop()
class UIController(tk.tk):
def uuu init uuu(self,master=None):
tk.Frame.\uuuuu init\uuuuuuu(自,主)
容器=tk.框架(自身)
container.pack(side=“top”,fill=“both”,expand=True)
self.frames={}
对于F in(起始页、浏览页、学生页):
框架=F(自身,容器)
self.frames[F]=帧
框架标题(“StudyApp”)
自显示框(起始页)
self.centerWindow()
def展示架(自身,c):
frame=self.frames[c]
frame.tkraise()
def中心窗口(自):
w=300
h=350
sw=self.master.winfo_屏幕宽度()
sh=self.master.winfo_屏幕高度()
x=(西南-西南)/2
y=(sh-h)/2
self.master.geometry(“%dx%d+%d+%d%”(w,h,x,y))
类起始页(传统框架):
定义初始(自我,主):
tk.Frame.\uuuuu init\uuuuuuu(自,主)
self.pack()
self.L1=标签(self,text=“按积分搜索:)
自我1位置(x=18,y=45)
self.startYear=Entry(self,bd=2)
自起始位置(x=20,y=70)
self.startYear.bind(“,View.enter(startYear.get()))
self.quitButton=Button(self,text=“Quit”,command=sys.exit)
self.quitButton.pack(side=“bottom”,padx=5,pady=5,fill=X)
self.searchButton=按钮(self,text=“Search”)
self.searchButton.pack(side=“bottom”,padx=5,pady=0,fill=X)
类别浏览器分隔页(传统框架):
定义初始(自我,主):
tk.Frame.\uuuuu init\uuuuuuu(自,主)
班级学生页面(tk.Frame):
定义初始(自我,主):
tk.Frame.\uuuuu init\uuuuuuu(自,主)
root=tk.tk()
根。可调整大小(宽度=假,高度=假)
uicontrol=UIController(根)
root.mainloop()
它给出了一个TypeError,构造函数接受了2个参数,但给出了3个。我想做的是将3页(起始页、浏览页和学生页)放在“容器”框架中,并根据需要按下按钮等。我不明白为什么我会犯这个错误

编辑:

添加了一个呼叫

编辑2:


添加了页面类StartPage、BrowsePage和StudentPage。后两个类在这一点上只是外壳。

我认为这是导致问题的原因,您不能将self实例传递给构造函数

frame = F(self, container)

请检查并添加更多信息到问题中,以了解您试图实现的目标。

您只需再添加一个参数,
controller

这对我很有用:

def __init__(self, master, controller):
    tk.Frame.__init__(self, master)

你能告诉我你怎么叫UIController吗?添加了代码。有什么想法吗?刚刚试过你的代码(除了'FALSE'=>'FALSE'),我正在完成初始化。尝试重新启动解释器,可能是旧变量困扰您。我得到了一个错误:“坏的一面”顶部:必须是顶部,底部,左侧或右侧“是的,我也注意到了。我将编辑这些内容并粘贴页面类,以防出现问题。谢谢!这让我克服了那个问题。真不敢相信这是件小事。。。我是按照我之前在这里找到的一个示例进行操作的,这个示例一定是滑进去的。非常确定它实际上是
tk.Frame.\uuu init\uuuu(self,master)
行,给出了错误消息。它们应该是
tk.Frame.\uuuu init\uuuu(master)