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割って感じがしますね。
ではまたの機会に~
コメントを残す