PyQt 入力制限

PyQt 入力制限

余計な入力を受け付けないようにする

年齢や誕生日など、数値を扱う場面でひらカナ漢字類を入力されるの非常に厄介です。

そういうときは最初から打たせないようにしましょう。

ソースコード

from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class Ui_Form(object):
	def setupUi(self, Form):
		Form.setObjectName("Form")
		Form.resize(200, 150)
		self.centralwidget = QtWidgets.QWidget(Form)
		self.centralwidget.setObjectName("centralwidget")

		self.text = QtWidgets.QLineEdit(self.centralwidget)
		self.text.setGeometry(QtCore.QRect(50, 37, 100, 50))
		lim = QtCore.QRegExp("[a-zA-Z]+")
		self.text.setValidator(QtGui.QRegExpValidator(lim))
		self.text.setObjectName("text")


class Test(QtWidgets.QDialog):
	def __init__(self,parent=None):
		super(Test, self).__init__(parent)
		self.ui = Ui_Form()
		self.ui.setupUi(self)



if __name__ == '__main__':
	app = QtWidgets.QApplication(sys.argv)
	window = Test()
	window.show()
	sys.exit(app.exec_())

ポイント

lim = QtCore.QRegExp("[a-zA-Z]+")
self.text.setValidator(QtGui.QRegExpValidator(lim))

「lim」って書くと極限を表しているみたいで懐かしいです...

こんな感じでQRegExpの中に入力を受け付けてよいものを正規表現(エスケープシーケンス)などで書きましょう。

参考

\tタブ
\v垂直タブ
\s空白文字(半角スペース、\t、\n、\r、\f)
\S空白文字以外のすべての文字
\d数字。[0-9]でもOK
\D数字以外の文字列。[^0-9]でもOK
\w半角英数字とアンダースコアのうち任意の一文字。[a-zA-Z0-9_]
\W半角英数字とアンダースコア以外の1文字[^a-zA-Z0-9_]

ここらへんはよく使いそうですね。

ただ、一文字よりかは文字列の方をよく使いそうなので [  ]を使うほうがわかりやすいと個人的に思っています。

サンプルコードで[a-zA-Z] と書いているのは、「(プラス)」が、直前のパターンの1回以上の繰り返しを表すためです。

終わりに

「python 正規表現」と検索するといっぱい情報はあるので、自分の欲しい情報を探してみてください。

プログラミングは調べることが8割って感じがしますね。

ではまたの機会に~

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です