- 1. Структура проекта
- 2. main .py
- 3. Итог
Доступны аналогичные статьи на Qt/С++ и Qt/QML
При разработке сетевых приложений может потребоваться создание формочки для ввода ip-адреса, но применение простого метода setInputMask(«000.000.000.000;_»); с данным аргументом для QLineEdit не обеспечивает должного результата, поскольку маска позволяет вводить значения 999, 657 и т.д., тогда как IP-адрес ограничивается число 255.
Одним из способов решения данной проблемы является применение Валидатора.
Подобный урок был реализован на Qt/C++, а теперь тоже самое реализуем на PyQt5/Python.
Структура проекта
Проект будет состоять только из одного файла:
- main .py
main .py
from PyQt5 import QtWidgets from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget, QLineEdit from PyQt5.QtCore import QSize, QRegExp from PyQt5.QtGui import QRegExpValidator # Наследуемся от QMainWindow class MainWindow(QMainWindow): # Переопределяем конструктор класса def __init__(self): # Обязательно нужно вызвать метод супер класса QMainWindow.__init__(self) self.setMinimumSize(QSize(480, 80)) # Устанавливаем размеры self.setWindowTitle("Line Edit IP Address") # Устанавливаем заголовок окна central_widget = QWidget(self) # Создаём центральный виджет self.setCentralWidget(central_widget) # Устанавливаем центральный виджет grid_layout = QGridLayout(self) # Создаём QGridLayout central_widget.setLayout(grid_layout) # Устанавливаем данное размещение в центральный виджет grid_layout.addWidget(QLabel("Введите IP-адрес", self), 0, 0) ipRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])" # Часть регулярного выржение # Само регулярное выражение ipRegex = QRegExp("^" + ipRange + "\\." + ipRange + "\\." + ipRange + "\\." + ipRange + "$") ipValidator = QRegExpValidator(ipRegex, self) # Валидатор для QLineEdit lineEdit = QLineEdit() lineEdit.setValidator(ipValidator) # Устанавливаем валидатор grid_layout.addWidget(lineEdit, 0, 1) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) mw = MainWindow() mw.show() sys.exit(app.exec())
Итог
В результате будет получено следующее окно с возможностью валидации IP-адреса.