【问题标题】:TypeError in __init__() unable to solve__init__() 中的 TypeError 无法解决
【发布时间】:2023-03-09 10:20:01
【问题描述】:
from tkinter import *
from tkinter.ttk import *


class window(Tk):
    def __init__(self, **kwargs):
        Tk.__init__(self, **kwargs)

        box=Frame(self).pack(fill=BOTH,expand=1)
        login=Frame(box,self).pack(fill=BOTH,expand=1)
        register=Frame(box,self).pack(fill=BOTH,expand=1)

        self.fup(login)

    def fup(self,f):
        f.tkraise()

class login(Frame):
    def __init__(self, parent, controller,**kwargs):
        Frame.__init__(self, parent)
        super().__init__(**kwargs)

        lab=Label(self,text='Login').grid(row=0,column=3,pady=3)
        but=Button(self,text='Signup',command=lambda : controller.fup(register)).grid(row=4,column=0)

class register(Frame):
    def __init__(self, parent, controller,**kwargs):
        Frame.__init__(self, parent)
        super().__init__(**kwargs)

        lab=Label(self,text='Register').grid(row=0,column=3,pady=3)
        but=Button(self,text='<<',command=lambda : controller.fup(login)).grid(row=0,column=0)



win=window()
win.mainloop()

【问题讨论】:

  • 出了什么问题?有追溯吗?如果有,请发布。
  • 欢迎来到 Stack Overflow。请阅读How to Ask提出问题。您还应该考虑stackoverflow.com/help/minimal-reproducible-example 中的建议。此布局中的所有小部件是否都与问题相关?
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: python class tkinter


【解决方案1】:

这里有很多问题。首先,您对类和类对象的工作方式感到困惑。当你说

        login=Frame(box,self).pack(fill=BOTH,expand=1)

这不会创建login 类的对象。它创建了一个简单的框架。在这种情况下,它根本不存储对象,因为pack 方法不返回任何内容。在您的login 类中,您引用register,但这不是一个对象,而是一个类。

这更接近你想要的,并打开了一个窗口,但由于我无法说出你真正想要什么,你必须从这里拿走。

from tkinter import *
from tkinter.ttk import *

class login(Frame):
    def __init__(self, parent, controller,**kwargs):
        super().__init__(parent, **kwargs)

        lab=Label(self,text='Login').grid(row=0,column=3,pady=3)
        but=Button(self,text='Signup',command=lambda : controller.fup(controller.register)).grid(row=4,column=0)

class register(Frame):
    def __init__(self, parent, controller,**kwargs):
        super().__init__(parent, **kwargs)

        lab=Label(self,text='Register').grid(row=0,column=3,pady=3)
        but=Button(self,text='<<',command=lambda : controller.fup(controller.login)).grid(row=0,column=0)


class window(Tk):
    def __init__(self, **kwargs):
        Tk.__init__(self, **kwargs)

        box=Frame(self) 
        box.pack(fill=BOTH,expand=1)
        self.login=login(box,self) 
        self.login.pack(fill=BOTH,expand=1)
        self.register=register(box,self) 
        self.register.pack(fill=BOTH,expand=1)

        self.fup(self.login)

    def fup(self,f):
        f.tkraise()

win=window()
win.mainloop()

【讨论】:

  • 非常感谢..但我对课程还不够清楚......任何网站都可以澄清
猜你喜欢
  • 2020-11-16
  • 1970-01-01
  • 2019-11-02
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-03
  • 2021-03-13
相关资源
最近更新 更多