Я использую pyglet 1.5.31 (glooey не работает с более поздними версиями) и glooey 0.3.6. Я создаю подклассы glooey.Form и glooey.EditableLabel и пытаюсь запретить пользователю вводить что-либо, кроме числа:
Exception ignored on calling ctypes callback function:
Traceback (most recent call last):
File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\window\win32\__init__.py", line 741, in f
result = event_handler(msg, wParam, lParam)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\window\win32\__init__.py", line 850, in _event_char
self.dispatch_event('on_text', text)
File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\window\__init__.py", line 1353, in dispatch_event
if EventDispatcher.dispatch_event(self, *args) != False:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\event.py", line 408, in dispatch_event
if handler(*args):
^^^^^^^^^^^^^^
File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\text\caret.py", line 421, in on_text
self._layout.document.insert_text(pos, text, self._next_attributes)
File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\text\document.py", line 425, in insert_text
self.dispatch_event('on_insert_text', start, text)
File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\event.py", line 408, in dispatch_event
if handler(*args):
^^^^^^^^^^^^^^
File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\text\layout.py", line 1976, in on_insert_text
self._update()
File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\text\layout.py", line 2029, in _update
self._update_glyphs()
File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\text\layout.py", line 2052, in _update_glyphs
if _grapheme_break(text[invalid_start - 1], text[invalid_start]):
~~~~^^^^^^^^^^^^^^^
Я получил логику проверки для работы с другими обработчиками событий, например с on_unfocus, но не могу с on_edit_text. Кроме того, ошибка возникает только после ввода нечислового И другого символа. Если я наберу не число, клавишу Backspace, а ЗАТЕМ попытаюсь ввести другой символ, ошибка не появится.
Я использую pyglet 1.5.31 (glooey не работает с более поздними версиями) и glooey 0.3.6. Я создаю подклассы glooey.Form и glooey.EditableLabel и пытаюсь запретить пользователю вводить что-либо, кроме числа: [code]import pyglet import glooey
class Number_Form(glooey.EditableLabel): def __init__(self, text): super().__init__(text) self.previous_text = text self.push_handlers(on_edit_text=self.prohibit_entry) def prohibit_entry(self, label): update_text = False if label.text == "": update_text = True else: if data_functions.validate_float(label.text): #Function to try to parse string as float and return false if fails update_text = True if not update_text: self.text = self.previous_text else: self.previous_text = label.text
form = Number_Form("1234") window = pyglet.window.Window() gui = glooey.Gui(window) gui.add(form) pyglet.app.run() [/code] Этот код завершается с ошибкой при трассировке, когда я пытаюсь ввести что-либо, кроме числа: [code]Exception ignored on calling ctypes callback function: Traceback (most recent call last): File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\window\win32\__init__.py", line 741, in f result = event_handler(msg, wParam, lParam) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\window\win32\__init__.py", line 850, in _event_char self.dispatch_event('on_text', text) File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\window\__init__.py", line 1353, in dispatch_event if EventDispatcher.dispatch_event(self, *args) != False: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\event.py", line 408, in dispatch_event if handler(*args): ^^^^^^^^^^^^^^ File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\text\caret.py", line 421, in on_text self._layout.document.insert_text(pos, text, self._next_attributes) File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\text\document.py", line 425, in insert_text self.dispatch_event('on_insert_text', start, text) File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\event.py", line 408, in dispatch_event if handler(*args): ^^^^^^^^^^^^^^ File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\text\layout.py", line 1976, in on_insert_text self._update() File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\text\layout.py", line 2029, in _update self._update_glyphs() File "C:\Users\elect\source\repos\eye_program\.venv\Lib\site-packages\pyglet\text\layout.py", line 2052, in _update_glyphs if _grapheme_break(text[invalid_start - 1], text[invalid_start]): ~~~~^^^^^^^^^^^^^^^ [/code] Я получил логику проверки для работы с другими обработчиками событий, например с on_unfocus, но не могу с on_edit_text. Кроме того, ошибка возникает только после ввода нечислового И другого символа. Если я наберу не число, клавишу Backspace, а ЗАТЕМ попытаюсь ввести другой символ, ошибка не появится.