Как правильно проверить мрачный EditableLabel в реальном времени (ошибка пиглета)? [закрыто]Python

Программы на Python
Ответить
Anonymous
 Как правильно проверить мрачный EditableLabel в реальном времени (ошибка пиглета)? [закрыто]

Сообщение Anonymous »

Я использую pyglet 1.5.31 (glooey не работает с более поздними версиями) и glooey 0.3.6. Я создаю подклассы glooey.Form и glooey.EditableLabel и пытаюсь запретить пользователю вводить что-либо, кроме числа:

Код: Выделить всё

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()
Этот код завершается с ошибкой при трассировке, когда я пытаюсь ввести что-либо, кроме числа:

Код: Выделить всё

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, а ЗАТЕМ попытаюсь ввести другой символ, ошибка не появится.

Подробнее здесь: https://stackoverflow.com/questions/798 ... pyglet-err
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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