[파이썬] PyQt 데이터 검증

PyQt is a powerful Python library for creating graphical user interfaces. Along with its GUI capabilities, PyQt also provides a way to validate user input data. Data validation is important to ensure that the user provides the expected data format or values.

In this blog post, we will explore how to implement data validation in PyQt using Python. We will cover basic validation techniques such as checking for empty input, validating numerical input, and verifying email addresses.

Checking for Empty Input

One common type of data validation is checking if an input field is empty. Empty input fields can lead to errors or unexpected behavior. PyQt provides a simple way to handle this type of validation using the QLineEdit widget.

Here’s an example code snippet that demonstrates how to check for empty input:

from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QVBoxLayout, QPushButton, QWidget

app = QApplication([])
window = QMainWindow()
centralWidget = QWidget(window)
window.setCentralWidget(centralWidget)
layout = QVBoxLayout(centralWidget)

label = QLabel("Name:")
layout.addWidget(label)

nameLineEdit = QLineEdit()
layout.addWidget(nameLineEdit)

submitBtn = QPushButton("Submit")
layout.addWidget(submitBtn)

def validate():
    name = nameLineEdit.text()
    if not name:
        print("Please enter your name")
        return

    # Continue with further processing

submitBtn.clicked.connect(validate)

window.show()
app.exec()

In this example, we have a simple form with a QLineEdit widget for the user to enter their name. The validate function is triggered when the submit button is clicked. If the name field is empty, it displays a message asking the user to enter their name.

Validating Numerical Input

Another common type of data validation is validating numerical input. For example, you may want to ensure that a user enters a positive integer or a number within a specific range. PyQt provides several widgets, such as QSpinBox and QDoubleSpinBox, which can be used to handle numerical input validation.

Here’s an example code snippet that demonstrates how to validate numerical input using QSpinBox:

from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QSpinBox, QVBoxLayout, QPushButton, QWidget

app = QApplication([])
window = QMainWindow()
centralWidget = QWidget(window)
window.setCentralWidget(centralWidget)
layout = QVBoxLayout(centralWidget)

label = QLabel("Age:")
layout.addWidget(label)

ageSpinBox = QSpinBox()
ageSpinBox.setMinimum(1)
ageSpinBox.setMaximum(100)
layout.addWidget(ageSpinBox)

submitBtn = QPushButton("Submit")
layout.addWidget(submitBtn)

def validate():
    age = ageSpinBox.value()
    if age == 0:  # The default value is 0
        print("Please enter a valid age")
        return

    # Continue with further processing

submitBtn.clicked.connect(validate)

window.show()
app.exec()

In this example, we have a form with a QSpinBox widget for the user to enter their age. The validate function is triggered when the submit button is clicked. If the age is zero (0), it displays a message asking the user to enter a valid age between 1 and 100.

Verifying Email Addresses

Validating email addresses is a more complex task as it involves checking the input against a specific pattern or format. PyQt provides regular expression support to handle this type of data validation. We can use the QRegExpValidator class to validate email addresses.

Here’s an example code snippet that demonstrates how to verify email addresses using QRegExpValidator:

import re
from PyQt5.QtGui import QRegExpValidator
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QVBoxLayout, QPushButton, QWidget

app = QApplication([])
window = QMainWindow()
centralWidget = QWidget(window)
window.setCentralWidget(centralWidget)
layout = QVBoxLayout(centralWidget)

label = QLabel("Email:")
layout.addWidget(label)

emailLineEdit = QLineEdit()
layout.addWidget(emailLineEdit)

submitBtn = QPushButton("Submit")
layout.addWidget(submitBtn)

emailValidator = QRegExpValidator(
    QRegExp(r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b")
)

def validate():
    email = emailLineEdit.text()
    if not emailValidator.validate(email, 0)[0]:
        print("Please enter a valid email address")
        return

    # Continue with further processing

submitBtn.clicked.connect(validate)

window.show()
app.exec()

In this example, we have a form with a QLineEdit widget for the user to enter their email address. The validate function is triggered when the submit button is clicked. It uses a regular expression pattern to validate the email address format. If the input doesn’t match the pattern, it displays a message asking the user to enter a valid email address.


By implementing data validation techniques in PyQt, we can ensure that the user provides the expected data format or values. Whether it’s checking for empty input, validating numerical input, or verifying email addresses, PyQt provides robust features to handle data validation in Python applications.