You can also change your code to be:
def input1_change(self, **event_args):
self.from_input1.text = str(self.input1.text)
You’ll see that the change event is firing and you’ll get None
whenever the value is invalid.
If you change the input from one invalid value to another invalid value, then there is no change to the number, and so the change event doesn’t fire.
(setting the text property of a component to None generally displays an empty string)