Kivy: контроллер не получает событие, отправленное всплывающим окномPython

Программы на Python
Anonymous
Kivy: контроллер не получает событие, отправленное всплывающим окном

Сообщение Anonymous »

Я пытался получать простые события из всплывающего окна на 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

Вернуться в «Python»