数据库管理器-炉石传说看自己牌库器
发布时间:2023-02-09 22:16 浏览次数:次 作者:佚名
我想获得每个类中属性的示例,例如用户密码和电子邮件,但我也希望能够让 add_widget 仅提供名称,但是:这是我目前拥有的代码
from kivy.uix import Screen, ScreenManager
class WindowManager(ScreenManager):
pass
sm = WindowManager()
在登录窗口中
class LoginWindow(Popups, Screen, FloatLayout, BoxLayout):
def __init__(self, email, password, checkBox, **kwargs):
self.email = email
self.password = password
self.checkBox = checkBox
super(self, **kwargs).__init__()
self.name = "login"
在主应用程序窗口中
sm.add_widget(LoginWindow(name="login"))
#actual phone app class
class PhoneAssistantApp(App):
def __init__(self):
super(self).__init__()
def build(self):
if LoginWindow.checkBox == True:
sm.current = "main"
else:
sm.current = "login" #user sent to login page whenever program is ran
return sm
if __name__ == "__main__":
PhoneAssistantApp().run()
但它抛出一个错误:
line 352, in
sm.add_widget(LoginWindow(name="login"))
TypeError: __init__() missing 3 required positional arguments: 'email', 'password', and 'checkBox'
我的 kv 文件中的登录窗口很简单:
:
name: "login" #name used to know where to send
email: email #links to object property in py file class
password: password #links to object property in py file class
checkBox: checkBox #links to boolean property in py file class
我认为错误出在我的主程序中,因为我试图弄清楚如何将两个属性示例都放入 kivy 中。
首先,我在 App 类中设置 sm.add_widget 和类名,例如
class PhoneAssistantApp(App):
def __init__(self, **kwargs):
super(self, **kwargs).__init__()
self.screens = ((LoginWindow(name="login"), CreateAccountWindow(name="Create))
self.sm = ScreenManager()
def build(self):
for screen in self.screens:
self.sm.add_widget(screens)
if LoginWindow.checkBox == True:
self.sm.current = "main"
else:
self.sm.current = "login" #user sent to login page whenever program is ran
return self.sm
if __name__ == "__main__":
PhoneAssistantApp().run()
除了
class PhoneAssistantApp(App):
def __init__(self, **kwargs):
super(self, **kwargs).__init__()
self.screens = ((LoginWindow(name="login"), CreateAccountWindow(name="Create))
def build(self):
for screen in self.screens:
sm.add_widget(screens)
if LoginWindow.checkBox == True:
sm.current = "main"
else:
sm.current = "login" #user sent to login page whenever program is ran
return sm
if __name__ == "__main__":
PhoneAssistantApp().run()
但是,删除它并没有解决问题。 此外,删除 kwargs 可能也无济于事。 在我将 init 添加到班级之前数据库管理器,它工作正常。 我正在使用 Visual Studio Code数据库管理器,在我添加 init** 之前,将鼠标悬停在上面的名称上会显示“name=[literal]”login,现在它只显示“name=”any。但是,在我的登录类中的新代码,当鼠标悬停在登录类中的名称上时,它还会返回“name=[literal] login”。相反,我希望能够使用该名称而不必将其他属性缩进到我的 sm 中.add_widget. 虽然我确实尝试将属性放入其中以查看可行的方法,但我倾向于放入:
sm.add_widget(LoginWindow(name="login", email=LoginWindow.email, password=LoginWindow.password, checkBox=LoginWindow.checkBox))
因为我只想要属性示例,但我认为这不是我应该做的,因为它只会给我错误。
line 352, in
sm.add_widget(LoginWindow(name="login", email=LoginWindow.email, password=LoginWindow.password, checkBox=LoginWindow.checkBox))
AttributeError: type object 'LoginWindow' has no attribute 'email'
感谢所有能提供帮助的人。