Используя PyQt5 lineEdit виджет, есть ли простой способ, доступны только целочисленные значения? - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь создать код, который вводит определенное число в виджет lineEdit, и нажимаю кнопку Виджет, и я могу получить это значение в виде целочисленного типа. Но все же тип значения, которое я получаю - это строка. Есть ли какой-нибудь красивый способ, которым я могу ограничить тип значения в lineEdit Widget как целое число? Кроме того, если тип значения в lineEdit не является целым числом, может ли всплывающее окно сообщений отображать, что вы ввели неверное значение?

import sys
from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QBoxLayout
from PyQt5.QtWidgets import QLabel
from PyQt5.QtWidgets import QLineEdit, QPushButton
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import Qt
from PyQt5 import QtGui

class Form(QWidget):
    def __init__(self):
        QWidget.__init__(self, flags=Qt.Widget)
        self.init_widget()

    def init_widget(self):

        form_lbx = QBoxLayout(QBoxLayout.TopToBottom, parent=self)
        self.setLayout(form_lbx)

        self.le = QLineEdit()
        self.btn = QPushButton("connect")
        self.btn.clicked.connect(self.func1)

        form_lbx.addWidget(self.le)
        form_lbx.addWidget(self.btn)

    def func1(self):
        value = self.le.text()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = Form()
    form.show()
    exit(app.exec_())

1 Ответ

0 голосов
/ 21 февраля 2020

Вы можете использовать QIntValidator(), чтобы ограничить ввод только целыми числами. Таким образом, вы знаете, что ввод будет содержать только цифры, и вы можете конвертировать текст в int, не беспокоясь об ошибках (если LineEdit не пуст).

self.le.setValidator(QIntValidator())

# Accessing the text
value = int(self.le.text())

Чтобы узнать больше, воспользуйтесь методом setValidator . Вы также можете рассмотреть возможность использования QSpinBox , который предназначен для целых чисел и может возвращать int напрямую с QSpinBox.value()

...