как правильно использовать файлы .kv и .py? — вызов функций из .kv как структурировать .py

Пытаюсь понять киви.

Работа над простым приложением, включающим несколько экранов. В настоящее время я пытаюсь вызвать всплывающее окно с помощью кнопки on_release в … безуспешно. Ошибка:

Traceback (most recent call last): File «C:UsersthomaPycharmProjectsFacesAppvenvlibsite-packageskivylangbuilder.py», line 725, in _apply_rule raise AttributeError(key) AttributeError: release During handling of the above exception, another exception occurred: Traceback (most recent call last): File «C:/Users/thoma/PycharmProjects/FacesGUI/main.py», line 36, in <module> kv = Builder.load_file(«my.kv») File «C:UsersthomaPycharmProjectsFacesAppvenvlibsite-packageskivylangbuilder.py», line 301, in load_file return self.load_string(data, **kwargs) File «C:UsersthomaPycharmProjectsFacesAppvenvlibsite-packageskivylangbuilder.py», line 405, in load_string rule_children=rule_children) File «C:UsersthomaPycharmProjectsFacesAppvenvlibsite-packageskivylangbuilder.py», line 657, in _apply_rule root=rctx[‘ids’][‘root’], rule_children=rule_children) File «C:UsersthomaPycharmProjectsFacesAppvenvlibsite-packageskivyuixwidget.py», line 469, in apply_class_lang_rules rule_children=rule_children) File «C:UsersthomaPycharmProjectsFacesAppvenvlibsite-packageskivylangbuilder.py», line 538, in apply rule_children=rule_children) File «C:UsersthomaPycharmProjectsFacesAppvenvlibsite-packageskivylangbuilder.py», line 734, in _apply_rule ‘{}: {}’.format(e.__class__.__name__, e), cause=tb) kivy.lang.builder.BuilderException: Parser: File «C:UsersthomaPycharmProjectsFacesGUImy.kv», line 100: … 98: center_x: self.parent.center_x 99: center_y: self.parent.center_y >> 100: on_release: root.show_popup() 101: 102: … AttributeError: release File «C:UsersthomaPycharmProjectsFacesAppvenvlibsite-packageskivylangbuilder.py», line 725, in _apply_rule raise AttributeError(key)

Я попытался вызвать с использованием root, app, self, создать экземпляр MyMainApp () и передать его. ????????

Я заметил, что некоторые пользователи рекомендуют использовать строки компоновщика в .py, в то время как другие предлагают использовать файл .kv для макета и т.д.

Какие преимущества или недостатки у одного или другого .. ?? Хотя я привык к макетам xml и классам java / kotlin для логики, использование .kv было немного … запутанным.

my.kv

<P>: Label: text: «Eneter Name or Type ‘skip’:» TextInput: text: «» Button: text: «Submit» WindowManager: MainWindow: SecondWindow: <MainWindow>: name: «main» GridLayout: cols:2 Button: text:»Live Camera» on_press: root.activatecamera() Button: text:»SD Card» on_press: root.sdcard() Button: text:»Event Images» on_press: root.viewEventImages() Button: text:»Event Faces» on_release: app.root.current = «eventfaces» root.manager.transition.direction = «left» Button: text:»List Names» on_press: root.listknownfaces() Button: text:»View Log» on_press: root.pipeout() Button: text:»Scan Directory» on_press: root.scanDirectory() Button: text:»Facial Recognition on Image» on_press: root.metadataRead() Button: text:»Label Image» on_press: root.metadataRead() Button: text:»Blur Faces» on_press: root.metadataRead() Button: text: «Metadata» on_release: app.root.current = «second» if passw.text == «tim» else «main» root.manager.transition.direction = «left» Button: text: «Misc.» on_release: app.root.current = «second» if passw.text == «tim» else «main» root.manager.transition.direction = «left» <SecondWindow>: name: «eventfaces» GridLayout: cols:1 rows:2 GridLayout: cols:4 Button: id: myButton Image: source: «unnamed/unnamed1.jpg» center_x: self.parent.center_x center_y: self.parent.center_y on_release: root.show_popup() Button: id: myButton Image: source: «unnamed/unnamed2.jpg» center_x: self.parent.center_x center_y: self.parent.center_y Button: id: myButton Image: source: «unnamed/unnamed3.jpg» center_x: self.parent.center_x center_y: self.parent.center_y Button: id: myButton Image: source: «unnamed/unnamed4.jpg» center_x: self.parent.center_x center_y: self.parent.center_y Button: id: myButton Image: source: «unnamed/unnamed5.jpg» center_x: self.parent.center_x center_y: self.parent.center_y Button: id: myButton Image: source: «unnamed/unnamed6.jpg» center_x: self.parent.center_x center_y: self.parent.center_y Button: id: myButton Image: source: «unnamed/unnamed7.jpg» center_x: self.parent.center_x center_y: self.parent.center_y Button: id: myButton Image: source: «unnamed/unnamed8.jpg» center_x: self.parent.center_x center_y: self.parent.center_y Button: id: myButton Image: source: «unnamed/unnamed9.jpg» center_x: self.parent.center_x center_y: self.parent.center_y Button: id: myButton Image: source: «unnamed/unnamed10.jpg» center_x: self.parent.center_x center_y: self.parent.center_y Button: id: myButton Image: source: «unnamed/unnamed11.jpg» center_x: self.parent.center_x center_y: self.parent.center_y Button: text: «Main Menu» on_release: app.root.current = «main» root.manager.transition.direction = «left»

main.py

from kivy.app import App from kivy.lang import Builder from kivy.uix.boxlayout import BoxLayout from kivy.uix.screenmanager import ScreenManager, Screen from kivy.uix.popup import Popup class P(BoxLayout): pass class MainWindow(Screen): pass class SecondWindow(Screen): pass class WindowManager(ScreenManager): pass def show_popup(): show = P() # Create a new instance of the P class popupWindow = Popup(title=»Enter Name or Type ‘skip’: «, content=show, size_hint=(None, None), size=(400, 400)) # Create the popup window popupWindow.open() # show the popup kv = Builder.load_file(«my.kv») class MyMainApp(App): def build(self): return kv if __name__ == «__main__»: MyMainApp().run()

Если кто-то может подсказать мне, следует ли мне использовать процесс строк Builder или .kv и / или как я могу создать всплывающее окно с меткой, вводом текста и кнопкой и вызовом с кнопки в нем, будет очень признателен.

Я считаю, что в моем файле .py есть ошибка, касающаяся структуры. Я попытался переместить def show_popup () в класс SecondWindow, как я видел в примере, но безуспешно.

Нужно ли назначать def (я) каждому окну? или их можно вызвать из-за пределов оконного класса?

Заранее спасибо. Я знаю, что это длинный пост для простой задачи. : /

код запускается, если on_release: root.show_popup () закомментирован   —  person ThomasLYIT    schedule 20.07.2020

Источник: ledsshop.ru

Стиль жизни - Здоровье!