AttributeError: 'NoneType' object has no attribute 'text' kivy
AttributeError: 'NoneType' object has no attribute 'text' kivy
我正在尝试从 ABC.kv
文件中的文本框中提取值。我在这个 发现了一个类似的问题。我尝试应用相同的解决方案,但错误不断出现。我不知道问题的根源在哪里。有人可以好心地阐明我面临的问题吗?
ABC.py
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.uix.popup import Popup
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
class LoginScreen(BoxLayout):
username_input = ObjectProperty()
passwd_input = ObjectProperty()
def __init__(self, **kwargs):
super(LoginScreen, self).__init__(**kwargs)
boxp = BoxLayout(orientation='vertical')
labs = Label(text='')
self.boxp = BoxLayout(orientation='vertical')
self.labs = Label(text='')
self.boxp.add_widget(self.labs)
self.box = BoxLayout()
self.box.orientation = 'horizontal'
btn5 = Button(text="ok", size_hint=(0.5, 0.5))
btn5.bind(on_release=self.checkin())
self.box.add_widget(btn5)
self.box.add_widget(Button(text='cancel', size_hint=(0.5, 0.5), on_release=self.cancel_button_hit))
self.boxp.add_widget(self.box)
self.popup = Popup(title="LOGIN SUCCESSFUL",
content=self.boxp,
size=(200, 200),
size_hint=(0.3, 0.3),
auto_dismiss=True)
def checkin(self):
if self.username_input.text=="root" and self.passwd_input.text=="root":
self.labs.text = self.username_input.text
self.popup.open()
else:
self.popup.title='Failed Login'
self.labs.text = 'Failed'
self.popup.open()
def cancel_button_hit(self, instance):
self.popup.dismiss()
class AnotherScreen(Screen):
pass
class ScreenManagement(ScreenManager):
pass
class MainApp(App):
def build(self):
return LoginScreen()
MainApp().run()
ABC.kv
#: import FadeTransition kivy.uix.screenmanager.FadeTransition
ScreenManagement:
transition: FadeTransition()
LoginScreen:
AnotherScreen:
<LoginScreen>:
orientation: "vertical"
username_input: username
passwd_input: passwd
padding: 10
spacing: 10
name: 'login'
BoxLayout:
orientation: "vertical"
Label:
text: "Username"
TextInput:
id: username
Label:
text: "password"
TextInput:
id: passwd
password: True
Button:
on_release: root.checkin()
text: 'login'
font_size: 50
<AnotherScreen>:
name: 'other'
Button:
on_release: app.root.current = 'main'
text: 'back to the home screen'
font_size: 50
回溯:
Traceback (most recent call last):
File "C:/Users/Admin/PycharmProjects/guihm/ABC.py", line 59, in <module>
MainApp().run()
File "C:\Python34\lib\site-packages\kivy\app.py", line 802, in run
root = self.build()
File "C:/Users/Admin/PycharmProjects/guihm/ABC.py", line 57, in build
return LoginScreen()
File "C:/Users/Admin/PycharmProjects/guihm/ABC.py", line 27, in __init__
btn5.bind(on_release=self.checkin())
File "C:/Users/Admin/PycharmProjects/guihm/ABC.py", line 38, in checkin
if self.username_input.text=="root" and self.passwd_input.text=="root":
AttributeError: 'NoneType' object has no attribute 'text'
username_input 和 password_input 缺少自我。删除自我。在他们
当用户单击 popup
中的 btn5
时,没有必要再次调用 checkin
方法。您已经在 ABC.kv
文件中出现的登录按钮的定义中调用了它。首先,从行 btn5.bind(on_release=self.checkin())
中删除 checkin
之后的括号。我建议调用不同的方法来处理 btn5
.
的 on_release
操作
btn5.bind(on_release=self.success)
定义一个名为success
的方法
def success(self,instance):
self.popup1.dismiss()
还要将 .kv 文件中的 ScreenManagement
class 括在 angular 大括号内。
我正在尝试从 ABC.kv
文件中的文本框中提取值。我在这个
ABC.py
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.uix.popup import Popup
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
class LoginScreen(BoxLayout):
username_input = ObjectProperty()
passwd_input = ObjectProperty()
def __init__(self, **kwargs):
super(LoginScreen, self).__init__(**kwargs)
boxp = BoxLayout(orientation='vertical')
labs = Label(text='')
self.boxp = BoxLayout(orientation='vertical')
self.labs = Label(text='')
self.boxp.add_widget(self.labs)
self.box = BoxLayout()
self.box.orientation = 'horizontal'
btn5 = Button(text="ok", size_hint=(0.5, 0.5))
btn5.bind(on_release=self.checkin())
self.box.add_widget(btn5)
self.box.add_widget(Button(text='cancel', size_hint=(0.5, 0.5), on_release=self.cancel_button_hit))
self.boxp.add_widget(self.box)
self.popup = Popup(title="LOGIN SUCCESSFUL",
content=self.boxp,
size=(200, 200),
size_hint=(0.3, 0.3),
auto_dismiss=True)
def checkin(self):
if self.username_input.text=="root" and self.passwd_input.text=="root":
self.labs.text = self.username_input.text
self.popup.open()
else:
self.popup.title='Failed Login'
self.labs.text = 'Failed'
self.popup.open()
def cancel_button_hit(self, instance):
self.popup.dismiss()
class AnotherScreen(Screen):
pass
class ScreenManagement(ScreenManager):
pass
class MainApp(App):
def build(self):
return LoginScreen()
MainApp().run()
ABC.kv
#: import FadeTransition kivy.uix.screenmanager.FadeTransition
ScreenManagement:
transition: FadeTransition()
LoginScreen:
AnotherScreen:
<LoginScreen>:
orientation: "vertical"
username_input: username
passwd_input: passwd
padding: 10
spacing: 10
name: 'login'
BoxLayout:
orientation: "vertical"
Label:
text: "Username"
TextInput:
id: username
Label:
text: "password"
TextInput:
id: passwd
password: True
Button:
on_release: root.checkin()
text: 'login'
font_size: 50
<AnotherScreen>:
name: 'other'
Button:
on_release: app.root.current = 'main'
text: 'back to the home screen'
font_size: 50
回溯:
Traceback (most recent call last):
File "C:/Users/Admin/PycharmProjects/guihm/ABC.py", line 59, in <module>
MainApp().run()
File "C:\Python34\lib\site-packages\kivy\app.py", line 802, in run
root = self.build()
File "C:/Users/Admin/PycharmProjects/guihm/ABC.py", line 57, in build
return LoginScreen()
File "C:/Users/Admin/PycharmProjects/guihm/ABC.py", line 27, in __init__
btn5.bind(on_release=self.checkin())
File "C:/Users/Admin/PycharmProjects/guihm/ABC.py", line 38, in checkin
if self.username_input.text=="root" and self.passwd_input.text=="root":
AttributeError: 'NoneType' object has no attribute 'text'
username_input 和 password_input 缺少自我。删除自我。在他们
当用户单击 popup
中的 btn5
时,没有必要再次调用 checkin
方法。您已经在 ABC.kv
文件中出现的登录按钮的定义中调用了它。首先,从行 btn5.bind(on_release=self.checkin())
中删除 checkin
之后的括号。我建议调用不同的方法来处理 btn5
.
on_release
操作
btn5.bind(on_release=self.success)
定义一个名为success
def success(self,instance):
self.popup1.dismiss()
还要将 .kv 文件中的 ScreenManagement
class 括在 angular 大括号内。