Я пытался получать простые события из всплывающего окна на kivy. Я вижу, что событие было отправлено, но контроллер ничего не получает.
После нескольких часов работы над этим, я попробовал простое приложение kivy, но оно также не сработало. .
from kivy.app import App
from kivy.uix.popup import Popup
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.event import EventDispatcher
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
class ManualAnalysisPopup(Popup, EventDispatcher):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.setup_ui()
self.register_event_types()
def register_event_types(self):
self.register_event_type('on_apply_pattern')
print("ManualAnalysisPopup: Registered on_apply_pattern event")
def on_apply_pattern(self):
print("ManualAnalysisPopup: on_apply_pattern event fired")
def setup_ui(self):
self.title = "Manual Image Analysis"
self.size_hint = (0.9, 0.9)
self.image_widget = Label(text="Image Placeholder")
apply_button = Button(text="Apply Pattern")
apply_button.bind(on_release=lambda btn: self.apply_pattern())
button_layout = BoxLayout(orientation='vertical')
button_layout.add_widget(self.image_widget)
button_layout.add_widget(apply_button)
self.content = button_layout
def apply_pattern(self):
print("Applying pattern")
self.dispatch('on_apply_pattern')
class ManualAnalysisController(EventDispatcher):
def __init__(self):
super().__init__()
self.popup = ManualAnalysisPopup()
Clock.schedule_once(lambda dt: self.bing_view_events())
self.show_popup()
def bing_view_events(self):
self.popup.bind(on_apply_pattern=self.handle_apply_pattern)
print("ManualAnalysisController: Events bound successfully")
def show_popup(self):
self.popup.open()
def handle_apply_pattern(self, instance, *args):
print("Handling apply pattern event")
class MyApp(App):
def build(self):
controller = ManualAnalysisController()
if __name__ == "__main__":
MyApp().run()
При нажатии кнопки этот код возвращает:
ManualAnalysisController: Events bound successfully
Applying pattern
ManualAnalysisPopup: on_apply_pattern event fired
Подробнее здесь: https://stackoverflow.com/questions/786 ... by-a-popup