Perspective Text Field Numeric Keypad

Does anybody know how to enable a numeric keypad on perspective?
We are using a touch screen as HMI, perspective does not have any built-in numeric keypads, maybe because perspective is web-browser based.
Has anybody found a way to enable a numeric keypad on perspective?

IiRC, there's a current bug causing this when the spinner is disabled. Try enabling the spinner on your fields.

I enable spinner, but that is an arrow up and down.
There is no numeric keypad.
It would be so hard for operator to operate on a touch screen.

If you're on a Windows device, have you had any luck with the On-Screen Keyboard? I know it seems to be a little buggy in itself, but might work for you.

I will try that.
If perspective has a popup for it would be nice.
Perspective is making it harder for people to build HMI.

1 Like

I'll agree with you that Perspective doesn't seem to be quite there for HMI yet.
I still prefer Vision for actual machine interfaces, and Perspective for dashboards and information displays for engineering/management.

I totally agree with you.
Just my client asked for Perspective, and giving me some templates of faceplates that do not work.

I built this Exchange resource ages ago, and I've just submitted an updated version for use in newer Ignitions version. The 1.0.0 version did not allow for anything other than integer values and required use of an Embedded View. The newer (1.1.0 - pending review) version supports double/float values and can be used in Popups or Docked Views. I'll update the instructions once the new version has been approved.

1 Like

I also created/modified a resource for keyboard/keypad if you want to give it a shot.


Thank you very much.
I will try this one.

It does not work. I had to cast oldvalue to string to get it to show value.
I am using pop-up, copied tag path directly to the parameter of pop-ups, then I had to caststring the oldvalue binding.
Do know where and how you enter the value to owner tag, do not know where to cast it.
I also tested using your test textfield, it did not work either.

I just re-tried it and it's working fine on my laptop running the latest 8.1.26 even without having to cast anything. You might check your events on the text field or numeric field (whichever one you're using) and make sure everything in there looks normal. You shouldn't be using tag paths in the popParams but only doing a bi-directional binding of the text property (or value property on numeric entry) on the component directly. The event script should stay as it is and configure everything through the component custom properties.

def runAction(self, event):
	popParams = {'owner':, 'oldValue': self.props.text, 'initCaps': self.custom.keypad.initCaps, 'titleCase': self.custom.keypad.titleCase, 'isPassword': self.custom.keypad.isPassword}
	posit = None if self.custom.keypad.centerScreen else {'left': event.clientX, 'top': event.clientY}
	system.perspective.openPopup('keypadPopup-' +, 'Exchange/Keypad/Alphanumeric Popup', title=self.custom.keypad.title, params=popParams, position=posit, showCloseIcon=True, draggable=True, resizable=True, viewportBound=True, modal=True, overlayDismiss=True)
1 Like

I honestly don't know how you do it.
Your script is not even a popup navigation. I could not get anything popup.
If I use a popup navigation, numeric keypad shows up with tag value, but when I change value hit enter, nothing happens.

What do you put in owner and oldvalue parameters.

The code I pasted there shouldn't be touched. The event script pulls everything it needs from the component's properties.

In my example:

Then the binding for the component's value should be bidirectional (are you missing this?) and configure the inputBounds minimum and maximum:

The last line of the script is calling the popup using the popParams as well as other configuration.

Are you using Script or Popup when you create event for the numeric entry.

I were to use Popup, what should I assign to "owner" and "oldValue"

I don't recommend using the popup event action as you'll have to manually configure it every time. For instance, in this screenshot, I just dropped a NumericEntryField on the root container as a test, but had to configure it manually with all of the parameters (units not shown in screenshot, but is there at the bottom if you were to scroll down).

If you leave it as the script, you don't have to do anything in the script to make it work as it's all using "self._____" so it automatically pulls in all of the information. The best way is to copy whichever input field you need and paste it into wherever you need it, but you can do it manually as well to add it to anything existing using my script action (copy/paste without any changes), adding the message handler script named "keypadReturn" with the exact script it has as well, along with the custom properties I have on the component itself. This allows you to modify the keypad by just configuring the component in the property editor to make the keypad work as needed.

Thanks for creating this! Exactly what I needed and works really well. Nice work and great README!

1 Like

Thanks for explaining.
I just cannot get it to work.
I did exactly the same, I can press number keys, and it displays whatever number press on the keypad, but when I press "enter", nothing happens. the number does not transfer to the tag.
I Have no what I've done wrong.
I actually tried configured the same way before you show me details, I was reading your script to configure it.
It seems other people can make it work, I just cannot.