Evgenii Legotckoi
12 ноября 2016 г. 18:39

PyQt5 - Урок 001. QLineEdit IP Address

Доступны аналогичные статьи на Qt/С++ и Qt/QML

При разработке сетевых приложений может потребоваться создание формочки для ввода ip-адреса, но применение простого метода setInputMask(«000.000.000.000;_»); с данным аргументом для QLineEdit не обеспечивает должного результата, поскольку маска позволяет вводить значения 999, 657 и т.д., тогда как IP-адрес ограничивается число 255.

Одним из способов решения данной проблемы является применение Валидатора.

Подобный урок был реализован на Qt/C++, а теперь тоже самое реализуем на PyQt5/Python.


Структура проекта

Проект будет состоять только из одного файла:

  1. main .py

main .py

  1. from PyQt5 import QtWidgets
  2. from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget, QLineEdit
  3. from PyQt5.QtCore import QSize, QRegExp
  4. from PyQt5.QtGui import QRegExpValidator
  5.  
  6.  
  7. # Наследуемся от QMainWindow
  8. class MainWindow(QMainWindow):
  9. # Переопределяем конструктор класса
  10. def __init__(self):
  11. # Обязательно нужно вызвать метод супер класса
  12. QMainWindow.__init__(self)
  13.  
  14. self.setMinimumSize(QSize(480, 80)) # Устанавливаем размеры
  15. self.setWindowTitle("Line Edit IP Address") # Устанавливаем заголовок окна
  16. central_widget = QWidget(self) # Создаём центральный виджет
  17. self.setCentralWidget(central_widget) # Устанавливаем центральный виджет
  18.  
  19. grid_layout = QGridLayout(self) # Создаём QGridLayout
  20. central_widget.setLayout(grid_layout) # Устанавливаем данное размещение в центральный виджет
  21.  
  22. grid_layout.addWidget(QLabel("Введите IP-адрес", self), 0, 0)
  23.  
  24. ipRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])" # Часть регулярного выржение
  25. # Само регулярное выражение
  26. ipRegex = QRegExp("^" + ipRange + "\\." + ipRange + "\\." + ipRange + "\\." + ipRange + "$")
  27. ipValidator = QRegExpValidator(ipRegex, self) # Валидатор для QLineEdit
  28.  
  29. lineEdit = QLineEdit()
  30. lineEdit.setValidator(ipValidator) # Устанавливаем валидатор
  31. grid_layout.addWidget(lineEdit, 0, 1)
  32.  
  33.  
  34. if __name__ == "__main__":
  35. import sys
  36.  
  37. app = QtWidgets.QApplication(sys.argv)
  38. mw = MainWindow()
  39. mw.show()
  40. sys.exit(app.exec())

Итог

В результате будет получено следующее окно с возможностью валидации IP-адреса.

Ссылка на репозиторий с проектом

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь