# -*- coding: utf-8 -*-
import sys
import re
from PySide2.QtWidgets import (QApplication,
QDialog,
QMainWindow,
QStatusBar,
QProgressBar,
QSizePolicy,
QPushButton,
QLineEdit,
QVBoxLayout)
from PySide2.QtCore import (Qt)
from PySide2.QtGui import (QValidator)
class UISample(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.edit = QLineEdit()
validator = SampleValidator(self.edit)
self.edit.setValidator(validator)
layout = QVBoxLayout()
layout.addWidget(self.edit)
self.setLayout(layout)
class ValidateEdit(QLineEdit):
def __init__(self, parent=None):
super().__init__(parent)
# 電話番号を入れられるようにしてみる
# ###-####-####
validate = SampleValidator(self)
self.setValidator(validate)
class SampleValidator(QValidator):
def __init__(self, parent=None):
super().__init__()
self.edit = parent
def fixup(self, input):
self.edit.setText(input[:-1] + "-" + input[-1])
def validate(self, input, pos):
# 入力の文字列が正しいかを判定する
# 空OK
if pos == 0:
return QValidator.Acceptable
if pos in [4, 9]:
if input[pos - 1] == "-":
return QValidator.Acceptable
self.fixup(input)
return (QValidator.Invalid, input, pos)
# 電話番号入れ終わったら、以降は入力させない
if pos > 13:
return QValidator.Invalid
# 数字限定
if re.search("[0-9]", input) is None:
return QValidator.Invalid
return QValidator.Acceptable
if __name__ == '__main__':
app = QApplication(sys.argv)
a = UISample()
a.show()
sys.exit(app.exec_())