Как создать список и записывать в него данные (Python) Update x

Как можно организовать список в который будут записываться даты по порядку?

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

Получается чтобы не выводя их на окно программы, а просто в фоновом режиме анализировать их и в случае если первая дата оказалась позднее второй, то выводить окно с ошибкой нарушения дат

import sys
import pytesseract
import win32api, time
import numpy as np                 
import cv2         

from urllib.request import urlopen
from PIL import Image, ImageGrab

from PyQt5.QtWidgets import (QApplication, QDialog, QMainWindow, QMessageBox)
from PyQt5.uic import loadUi
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *


from MainMenu import Ui_MainWindow

class Window(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)


#-------------------------------------------------------------
        mainMenu = self.menuBar()
        instmenu = mainMenu.addMenu("Инстументы")
        file = mainMenu.addMenu("Файл")
        videlenie = QAction("Выделить для копирования", self)
        instmenu.addAction(videlenie)                        
        videlenie.triggered.connect(self.screenshot)         
        photo = QAction("Вставить фото", self)
        file.addAction(photo)
        photo.triggered.connect(self.getImage)

        self.image_foreground = QImage(self.size(), QImage.Format_ARGB32_Premultiplied)
        self.image_foreground.fill(Qt.transparent)
        self.image_background = QImage(self.size(), QImage.Format_ARGB32_Premultiplied)
        self.image_background.fill(Qt.white)

        self.instrument = 'screenshot'

        self.selection = QRubberBand(QRubberBand.Rectangle, self) 
        self.start = QPointF() 
        self.end = QPointF()   

        self.ui.pushButton.clicked.connect(self.btnClicked)
        self.ui.pushButton_2.clicked.connect(self.btnClicked2)
    

    def getImage(self):
        filename, _ = QFileDialog.getOpenFileName(
            self, 
            "Выберите изображение", 
            "",
            "PNG(*.png);;JPEG(*.jpg *.jpeg);;All Files(*.*)"
        )
        if not filename:
            return
        #self.ui.label_2.setText(QCoreApplication.translate("MainWindow", u"{}".format(filename), None))
        self.ui.label_2.setPixmap(QPixmap(u"{}".format(filename)))
        self.selection.hide()  


    def paintEvent(self, event):
        painter = QPainter(self)
        painter.drawImage(self.rect(), self.image_background, self.image_background.rect())
        painter.drawImage(self.image_foreground.rect(), self.image_foreground)

    def mousePressEvent(self, event):
        if event.buttons() == Qt.LeftButton and self.instrument == 'screenshot': 
            self.start = event.pos() 
            self._start = event.globalPos()

    def mouseMoveEvent(self, event):
        if event.buttons() == Qt.LeftButton and self.instrument == 'screenshot': 
            self.end = event.pos()
            self.selection.setGeometry(QRect(self.start, self.end).normalized())
            self.selection.show()

    def mouseReleaseEvent(self, event):
        if self.instrument == 'screenshot':  
            self._end = event.globalPos()
            self.selection.hide()
            QTimer.singleShot(20, self.newLabel)

    def newLabel(self):
        self.selection.hide()
        self.instrument = 'None'
        img = ImageGrab.grab(bbox=(
            self._start.x(), 
            self._start.y(), 
            self._end.x(), 
            self._end.y()
        ))
        
        pathImage = '4.png'                      # <--- тут будет обрезанное изображение
        img.save(pathImage)
        img = cv2.cvtColor(np.array(img), cv2.COLOR_BGR2RGB)
        cv2.waitKey(0)
        cv2.destroyAllWindows()        
    
    def screenshot(self):        
        self.instrument = 'screenshot' 
        
    def resizeEvent(self, event):   
        self.image_foreground = QImage(self.size(), QImage.Format_ARGB32_Premultiplied)
        self.image_foreground.fill(Qt.transparent)
        self.update()
        super().resizeEvent(event)

        

    def btnClicked(self):
        self.ui.label.setText("Дата на документе: " + text)
        # Если не использовать, то часть текста исчезнет.
        self.ui.label.adjustSize()

    def btnClicked2(self):
        self.instrument = 'screenshot'
        image = Image.open('4.png')
        pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
        text2 = pytesseract.image_to_string(image, lang='rus+eng')
        self.ui.label.setText(text2)
        self.ui.label.adjustSize()

image = Image.open('4.jpg')
cropped = image.crop((0, 200, 250, 270))
cropped.save('cropped_jelly.png')
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
text = pytesseract.image_to_string(cropped, lang='rus+eng')

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

Update 1

Не учел что подключаю интерфейс к программе файл MainMenu.py

from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(582, 545)
        self.action = QAction(MainWindow)
        self.action.setObjectName(u"action")
        self.action_2 = QAction(MainWindow)
        self.action_2.setObjectName(u"action_2")
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.label_2 = QLabel(self.centralwidget)
        self.label_2.setObjectName(u"label_2")
        self.label_2.setPixmap(QPixmap(u"4.jpg"))
        self.label_2.setGeometry(QRect(10, 10, 321, 501))
        self.label_2.setTextFormat(Qt.MarkdownText)
        self.label_2.setScaledContents(True)
        self.label_2.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter)
        self.label_2.setMargin(-3)
        self.label_2.setOpenExternalLinks(False)
        self.label = QLabel(self.centralwidget)
        self.label.setObjectName(u"label")
        self.label.setGeometry(QRect(340, 20, 211, 351))
        self.label.setScaledContents(True)
        self.gridLayoutWidget = QWidget(self.centralwidget)
        self.gridLayoutWidget.setObjectName(u"gridLayoutWidget")
        self.gridLayoutWidget.setGeometry(QRect(360, 410, 211, 80))
        self.gridLayout = QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setObjectName(u"gridLayout")
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.pushButton = QPushButton(self.gridLayoutWidget)
        self.pushButton.setObjectName(u"pushButton")

        self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1)

        self.pushButton_2 = QPushButton(self.gridLayoutWidget)
        self.pushButton_2.setObjectName(u"pushButton_2")

        self.gridLayout.addWidget(self.pushButton_2, 0, 0, 1, 1)

        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
        self.action.setText(QCoreApplication.translate("MainWindow", u"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0444\u043e\u0442\u043e", None))
        self.action_2.setText(QCoreApplication.translate("MainWindow", u"\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u043b\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f", None))
        self.label_2.setText(QCoreApplication.translate("MainWindow", u"", None))
        self.label.setText("")
        self.pushButton.setText(QCoreApplication.translate("MainWindow", u"\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c", None))
        self.pushButton_2.setText(QCoreApplication.translate("MainWindow", u"\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c", None))
    # retranslateUi

И задана стартовая фотография

4.jpg

Получается саму переменную text я уже получаю в текстом виде и хочу чтобы каждая сканированная дата записывалась в отдельный список и сравнивалась

Update 2

Нажимая на кнопку сканировать я получаю - 05.02.2000


Ответы (1 шт):

Автор решения: S. Nick

На небольшом примере, ваша задумка, может выглядеть как в приведенном мною примере.

Я думаю вы без особого труда вставите в свое приложение метод newDate немного откорректировав его и передав в этот метод переменную text, в которой у вас дата в виде строки 05.02.2000.

import sys
from PyQt5.Qt import *


class Window(QMainWindow):
    def __init__(self):
        super().__init__()  
        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)
        
        # Это условная дата, меньше которой документы считаются не валидные
        self.dateList = [QDate(1961, 1, 1),]                                         # !!!

        self.labelImage = QLabel()
        self.labelText = QLabel()
        self.lineEdit = QLineEdit(
            placeholderText='Введите дату в формате ДД.ММ.ГГГГ и нажмите `Enter`')
        self.lineEdit.returnPressed.connect(self.newDate)   

        layout = QVBoxLayout(self.centralWidget)
        layout.addWidget(self.labelImage)
        layout.addStretch()
        layout.addWidget(self.labelText)
        layout.addWidget(self.lineEdit)

    def newDate(self):
        text = self.lineEdit.text()
        if not text:
            return
        day, month, year = map(int, self.lineEdit.text().split('.'))
        _newDate = QDate(year, month, day)
        self.labelText.setText(f'{text} <--- последняя дата, которую вы вводили.')

        if self.dateList[-1] > _newDate:                                             # !!!
            msg = QMessageBox.information(
                self, 
                'Title', 
                f'Content:      первая дата {self.dateList[-1].toString("dd.MM.yyyy")} \n'
                f'оказалась позднее второй {text}.',
            )  
            self.labelImage.clear()
            self.lineEdit.clear()
            self.lineEdit.setFocus()
            return
        
        self.dateList.append(_newDate)                                               # !!!
        self.labelImage.setPixmap(QPixmap("boy.jpg").scaled(580, 230))
        self.lineEdit.clear()    
        self.lineEdit.setFocus()
        # print(self.dateList)   # <<<----
        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = Window()
    w.resize(600, 300)
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка