Я создал приложение, в котором при запуске появляется всплывающее окно с запросом учетных данных для входа. После ввода правильных учетных данных это всплывающее окно должно закрываться, чтобы «главное окно» за ним было доступно.
main.py:
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import ObjectProperty
from kivy.graphics import Rectangle
from kivy.graphics import Color
from kivy.graphics import Line
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.config import Config
from kivy.uix.popup import Popup
from kivy.clock import Clock
from kivy.core.window import Window
Config.set('graphics', 'width', '1024')
Config.set('graphics', 'height', '768')
class LoginWindow(Screen):
pass
class MainWindow(Screen):
pass
class WindowManager(ScreenManager):
pass
class LoginPopup(Screen): # Popup Window
def login_popup(dt): # Function to call Popup Window
show = LoginPopup()
popupWindow = Popup(title="Please log in", content=show, size_hint=(None, None), size=(400, 125),
auto_dismiss=False)
popupWindow.open()
kv = Builder.load_file("my.kv")
class MainApp(App):
def dismiss(self):
self.dismiss()
def build(self):
Clock.schedule_once(LoginPopup.login_popup, 1) # Loading the login popup 1 second after initialising
return kv
if __name__ == "__main__":
MainApp().run()
my.kv
<LoginPopup>:
id: popupWindow
GridLayout:
rows: 2
FloatLayout:
size_hint: 1,0.5
rows: 1
cols: 2
Label:
pos: (0,40)
text: "Password: "
text_size: self.size
TextInput:
pos: (80,35)
size_hint_y: (.8)
size_hint_x: (.785)
password: True
id: password
multiline: False
Button:
id: login_button
text: "Login"
size_hint: 1,0.5
pos_hint: {"x":0,"y":0.1}
on_release:
root.login_popup.popupWindow.dismiss() if password.text == "XXX" else None
print(password.text)
Внутри my.kv я хочу закрыть всплывающее окно с помощью root.login_popup.popupWindow.dismiss() if password.text == "XXX" else None
, но получаю сообщение об ошибке, что «объект 'function' не имеет атрибута 'popupWindow'
Это потому, что" popupWindow "создается с другим именем? Как это исправить?
(Я удалил часть кода my.kv других экранов, поскольку они не используются.)