【MayaPySide】InputMaskを使って入力を制限する【PySide2】

python,qt,PySide,maya,PySide2


inputMaskは、小数点を常に入力されるなどのように入力に対してマスクをかけることができるプロパティです
下のコードをひな型にコードを記述していきますのでご使用ください

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys

from Qt.QtWidgets import *
from Qt.QtGui import *
from Qt.QtCore import *

class exampleWidget(QWidget):
    def __init__(self, *args, **kwargs):
        super(exampleWidget, self).__init__( *args, **kwargs)
        self.initUI()

    def initUI(self):
        line = QLineEdit(self)
        btn = QPushButton(self)
        layout = QFormLayout(self)
        layout.addWidget(line)
        layout.addWidget(btn)
        self.setLayout(layout)

    def ButtonClick(self):
        # shost is a QString object
        shost = self.line.text()
        print shost


def main():
    app = QApplication.instance()
    ex = exampleWidget()
    ex.show()
    sys.exit()
    app.exec_()

if __name__ == '__main__':
    main()

今回は入力に対して整数1桁で小数点第二位まで表示できるように入力のマスクをかけていきたいと思います
まずはデフォルトで表示したい数字をsetTextを使用して表示させてみます

		# ~~~~~~~~~~~~~~~
    def initUI(self):
        line = QLineEdit(self)
        line.setText("0.00")
        layout = QFormLayout(self)
        layout.addWidget(line)
		# ~~~~~~~~~~~~~~~

実行すると下の画像のように0.00が入力されているwindowが表示できます

しかし、このままでは数字以外や小数点第二以上の入力が可能のままになってしまいます
その時に使用するのがsetInputMaskです
InputMaskは、下の表にあるメタ文字を使用することができます

メタ文字 意味
A アスキーのアルファベットが必要です。A-Z、a-z。
a アスキー英数字は許可されていますが、必須ではありません。
N アスキー英数字必須。A-Z、a-z、0-9。
n アスキー英数字は許可されていますが、必須ではありません。
X 任意の文字が必要です。
x 任意の文字は許可されていますが、必須ではありません。
9 ASCII 数字が必要です。0-9.
0 ASCII 数字は必須ではありません。
D ASCII 数字必須。1-9.
d ASCII 数字は許可されるが、必須ではない (1-9)。
# ASCII 数字またはプラス/マイナス記号は使用可能ですが、必須ではありません。
H 16進数文字必須。a~f 0~9。
h 16進数文字は許可されるが、必須ではない。
B 2進数が必要です。0-1.
b 2進数は使用可能ですが、必須ではありません。
> 以下のアルファベットはすべて大文字です。
< 以下のアルファベットはすべて小文字です。
! 大文字小文字の変換を向こうにします。
\ 上記の特殊文字をエスケープしてセパレータとして使用する場合は、「\」を使用してください。

整数1桁で小数点第二位まで表示できるように入力のマスクをかけたいため
上の表を参考に下のコードのようにline.setInputMask("0.00")で入力のマスクをかけてみます

		# ~~~~~~~~~~~~~~~
    def initUI(self):
        line = QLineEdit(self)
        line.setText("0.00")
        line.setInputMask("0.00")
        layout = QFormLayout(self)
        layout.addWidget(line)
		# ~~~~~~~~~~~~~~~


うまくマスクをつけることができれば上の画像のように入力のマスクをつけれると思います


Tips

		# ~~~~~~~~~~~~~~~
    def initUI(self):
        line = QLineEdit(self)
        line.setText("8D6G56-ADA45-61231-23DA1-23132")
        line.setInputMask(">HHHHH-HHHHH-HHHHH-HHHHH-HHHHH;#")
        layout = QFormLayout(self)
        layout.addWidget(line)
		# ~~~~~~~~~~~~~~~

例えば上のようなメタ文字に変えれば、下の画像のようにシリアルナンバー入力みたいな制限もできます


個人的にはinputMask結構使用するプロパティですので是非活用してみてください!

		# ~~~~~~~~~~~~~~~
    def initUI(self):
        line = QLineEdit(self)
        line.setText("0.00")
        line.setInputMask("0.00")
        line.setFrame(False)
        line.setAlignment(Qt.AlignRight)
        layout = QFormLayout(self)
        layout.addWidget(line)
		# ~~~~~~~~~~~~~~~

またsetFrameを無効、setAlignment(Qt.AlignRight)追加で記述すると
フレームを消したり、行の配置を右や中央のように変更することができます

前回の記事で記述した【MayaPySide】QLineEditで数値のみの入力させる方法【PySide2】で使用する
setValidatorと組み合わせて使用することも可能です