Введите поле ввода с проверкой в ​​Python, используя PyQt - PullRequest
0 голосов
/ 20 марта 2019

У меня есть скрипт на python, который принимает номер заказа в качестве входных данных, а на выходе будут стоимость товара, налог и сумма.Также адрес, по которому товар был отправлен.В этой программе у меня есть следующий фрагмент кода для ввода

Oname = '1'  #something that doesn't validate
while True:
    Oname = input("Please enter the Order number: ").upper() #ask for order number
    if not re.match(r"\b[A-Z]{2}[-][0-9]{6}\b", Oname): #check if the Order number is in the right format
        print ("Error! Please enter Order in format 'RS-XXXXXX'") #if the Order number is not in the right format, keep asking
    else:
        break

Это работает отлично.Тем не менее, я хочу сделать это с помощью всплывающего окна ввода (с pyQT4) вместо командной строки (я делюсь этим с другими, и они предпочитают окно для куколки, а не командную строку).Кроме того, мне нужна кнопка отмены в окне «щенка», и если пользователь щелкает по нему (пользователь, возможно, передумал и не хочет запускать программу), сценарий python должен остановиться.

Вышедве вещи абсолютно необходимы.Еще один пункт в списке желаний: рядом с полем ввода должен быть установлен флажок «Это подарок».Если пользователь установит этот флажок, будет напечатано только сообщение о том, что «товар был отправлен на адрес ххххх».Часть кода, где рассчитывается цена, запускать не нужно.

1 Ответ

0 голосов
/ 20 марта 2019

Извините, у меня есть PyQt5. Попробуйте:

import sys 
#from PyQt4.QtCore    import *
#from PyQt4.QtGui     import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore    import *
from PyQt5.QtGui     import *

class Demo(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)

        self.label = QLabel("Please enter Order in format `RS-XXXXXX`:", alignment=Qt.AlignCenter)
        self.chBox = QCheckBox("<-is this a gift item")

        self.lineEdit= QLineEdit()

        # a cancel button
        self.lineEdit.setClearButtonEnabled(True)

        self.lineEdit.setToolTip("press RETURN to check")
        self.lineEdit.setStyleSheet(""" QLineEdit {border: None;
                                                   font-size: 14px;} """)
        # lineEdit with validation                                              
        self.lineEdit.setInputMask('AA-999999')    
        self.lineEdit.returnPressed.connect(lambda : self.findText(self.lineEdit.text()))

        self.textBrowser = QTextBrowser()
        self.button = QPushButton("click me to check")
        self.button.clicked.connect(lambda : self.findText(self.lineEdit.text()))

        self.grid = QGridLayout(centralWidget)
        self.grid.addWidget(self.label,       0, 0, 1, 2)  
        self.grid.addWidget(self.chBox,       1, 0)
        self.grid.addWidget(self.lineEdit,    1, 1)
        self.grid.addWidget(self.textBrowser, 2, 0, 1, 2)   
        self.grid.addWidget(self.button,      3, 0, 1, 2)

    def findText(self, text=None):
        if self.lineEdit.hasAcceptableInput():
            self.textBrowser.append(text)      
            if self.chBox.isChecked():  
                self.textBrowser.insertPlainText("; chBox -> True. Is this a gift item.")        


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mw = Demo()
    mw.show()
    sys.exit(app.exec_())

enter image description here

...