Free OCR package in Python and selecting appropriate widget for the GUI
Mohsen Owzar
mohsen.owzar at gmail.com
Thu Sep 23 02:53:04 EDT 2021
DFS schrieb am Mittwoch, 22. September 2021 um 09:41:42 UTC+2:
> On 9/22/2021 1:54 AM, Mohsen Owzar wrote:
> > DFS schrieb am Mittwoch, 22. September 2021 um 05:10:30 UTC+2:
> >> On 9/21/2021 10:38 PM, Mohsen Owzar wrote:
> >>> DFS schrieb am Dienstag, 21. September 2021 um 15:45:38 UTC+2:
> >>>> On 9/21/2021 4:36 AM, Mohsen Owzar wrote:
> >>>>> Hi Guys
> >>>>> Long time ago I've written a program in Malab a GUI for solving Sudoku puzzles, which worked not so bad.
> >>>>> Now I try to write this GUI with Python with PyQt5 or TKinter.
> >>>>> First question is:
> >>>>> Is there any free OCR software, packages or code in Python, which I can use to recognize the given digits and their positions in the puzzle square.
> >>>>> Second:
> >>>>> Because, I can not attach a picture to this post, I try to describe my picture of my GUI.
> >>>> Draw your GUI in PyQt designer or other graphics tool, then upload a
> >>>> screenshot of it to imgur, then post the link to the picture.
> >>> Thanks, for your answer.
> >>> But, what is "imgur"?
> >>> I'm not so familiar with handling of pictures in this group.
> >>> How can I call "imgur" or how can I get there?
> >>>
> >>> Regards
> >>> Mohsen
> >> www.imgur.com
> >>
> >> It's a website you can upload image files or screenshots to. Then you
> >> can copy a link to your picture and post the link here.
> > I have already posted the link, but I can not see it anywhere.
> > Now, I post it again:
> > https://imgur.com/a/Vh8P2TE
> > I hope that you can see my two images.
> > Regards
> > Mohsen
> Got it.
>
> I haven't used tkinter. In PyQt5 designer I think you should use one
> QTextEdit control for each square.
>
>
> Each square with the small black font can be initially populated with
>
> 1 2 3
> 4 5 6
> 7 8 9
>
>
>
> https://imgur.com/lTcEiML
>
>
>
> some starter python code (maybe save as sudoku.py)
>
> =====================================================================
> from PyQt5 import Qt, QtCore, QtGui, QtWidgets, uic
> from PyQt5.Qt import *
> from PyQt5.QtCore import *
> from PyQt5.QtGui import *
> from PyQt5.QtWidgets import *
>
> #objects
> app = QtWidgets.QApplication([])
> frm = uic.loadUi("sudoku.ui")
>
>
> #grid = a collection of squares
> grids = 1
>
> #squares = number of squares per grid
> squares = 9
>
> #fill the squares with 1-9
> def populateSquares():
> for i in range(grids,grids+1):
> for j in range(1,squares+1):
> widget = frm.findChild(QtWidgets.QTextEdit, "txt{}_{}".format(i,j))
> widget.setText("1 2 3 4 5 6 7 8 9")
>
> #read data from squares
> def readSquares():
> for i in range(grids,grids+1):
> for j in range(1,squares+1):
> print("txt%d_%d contains: %s" %
> (i,j,frm.findChild(QtWidgets.QTextEdit,
> "txt{}_{}".format(i,j)).toPlainText()))
>
>
> #connect pushbuttons to code
> frm.btnPopulate.clicked.connect(populateSquares)
> frm.btnReadContents.clicked.connect(readSquares)
>
> #show main form
> frm.show()
>
> #initiate application
> app.exec()
> =====================================================================
>
>
>
>
>
> .ui file (ie save as sudoku.ui)
> =====================================================================
>
> <?xml version="1.0" encoding="UTF-8"?>
> <ui version="4.0">
> <class>MainWindow</class>
> <widget class="QMainWindow" name="MainWindow">
> <property name="geometry">
> <rect>
> <x>0</x>
> <y>0</y>
> <width>325</width>
> <height>288</height>
> </rect>
> </property>
> <property name="windowTitle">
> <string>Sudoku</string>
> </property>
> <widget class="QWidget" name="centralwidget">
> <widget class="QTextEdit" name="txt1_1">
> <property name="geometry">
> <rect>
> <x>32</x>
> <y>22</y>
> <width>83</width>
> <height>65</height>
> </rect>
> </property>
> <property name="font">
> <font>
> <family>Courier</family>
> <pointsize>12</pointsize>
> <weight>50</weight>
> <bold>false</bold>
> </font>
> </property>
> <property name="acceptDrops">
> <bool>false</bool>
> </property>
> <property name="styleSheet">
> <string notr="true">color: rgb(0, 0, 127);
> background-color: rgb(255, 255, 127);</string>
> </property>
> <property name="frameShape">
> <enum>QFrame::StyledPanel</enum>
> </property>
> <property name="frameShadow">
> <enum>QFrame::Sunken</enum>
> </property>
> <property name="horizontalScrollBarPolicy">
> <enum>Qt::ScrollBarAlwaysOff</enum>
> </property>
> <property name="acceptRichText">
> <bool>true</bool>
> </property>
> </widget>
> <widget class="QTextEdit" name="txt1_2">
> <property name="geometry">
> <rect>
> <x>114</x>
> <y>22</y>
> <width>83</width>
> <height>65</height>
> </rect>
> </property>
> <property name="font">
> <font>
> <family>Courier</family>
> <pointsize>12</pointsize>
> <weight>50</weight>
> <bold>false</bold>
> </font>
> </property>
> <property name="acceptDrops">
> <bool>false</bool>
> </property>
> <property name="styleSheet">
> <string notr="true">color: rgb(0, 0, 127);
> background-color: rgb(255, 255, 127);</string>
> </property>
> <property name="frameShape">
> <enum>QFrame::StyledPanel</enum>
> </property>
> <property name="frameShadow">
> <enum>QFrame::Sunken</enum>
> </property>
> <property name="horizontalScrollBarPolicy">
> <enum>Qt::ScrollBarAlwaysOff</enum>
> </property>
> <property name="acceptRichText">
> <bool>true</bool>
> </property>
> </widget>
> <widget class="QTextEdit" name="txt1_3">
> <property name="geometry">
> <rect>
> <x>196</x>
> <y>22</y>
> <width>83</width>
> <height>65</height>
> </rect>
> </property>
> <property name="font">
> <font>
> <family>Courier</family>
> <pointsize>12</pointsize>
> <weight>50</weight>
> <bold>false</bold>
> </font>
> </property>
> <property name="acceptDrops">
> <bool>false</bool>
> </property>
> <property name="styleSheet">
> <string notr="true">color: rgb(0, 0, 127);
> background-color: rgb(255, 255, 127);</string>
> </property>
> <property name="frameShape">
> <enum>QFrame::StyledPanel</enum>
> </property>
> <property name="frameShadow">
> <enum>QFrame::Sunken</enum>
> </property>
> <property name="horizontalScrollBarPolicy">
> <enum>Qt::ScrollBarAlwaysOff</enum>
> </property>
> <property name="acceptRichText">
> <bool>true</bool>
> </property>
> </widget>
> <widget class="QTextEdit" name="txt1_4">
> <property name="geometry">
> <rect>
> <x>32</x>
> <y>86</y>
> <width>83</width>
> <height>65</height>
> </rect>
> </property>
> <property name="font">
> <font>
> <family>Courier</family>
> <pointsize>12</pointsize>
> <weight>50</weight>
> <bold>false</bold>
> </font>
> </property>
> <property name="acceptDrops">
> <bool>false</bool>
> </property>
> <property name="styleSheet">
> <string notr="true">color: rgb(0, 0, 127);
> background-color: rgb(255, 255, 127);</string>
> </property>
> <property name="frameShape">
> <enum>QFrame::StyledPanel</enum>
> </property>
> <property name="frameShadow">
> <enum>QFrame::Sunken</enum>
> </property>
> <property name="horizontalScrollBarPolicy">
> <enum>Qt::ScrollBarAlwaysOff</enum>
> </property>
> <property name="acceptRichText">
> <bool>true</bool>
> </property>
> </widget>
> <widget class="QTextEdit" name="txt1_5">
> <property name="geometry">
> <rect>
> <x>114</x>
> <y>86</y>
> <width>83</width>
> <height>65</height>
> </rect>
> </property>
> <property name="font">
> <font>
> <family>Courier</family>
> <pointsize>12</pointsize>
> <weight>50</weight>
> <bold>false</bold>
> </font>
> </property>
> <property name="acceptDrops">
> <bool>false</bool>
> </property>
> <property name="styleSheet">
> <string notr="true">color: rgb(0, 0, 127);
> background-color: rgb(255, 255, 127);</string>
> </property>
> <property name="frameShape">
> <enum>QFrame::StyledPanel</enum>
> </property>
> <property name="frameShadow">
> <enum>QFrame::Sunken</enum>
> </property>
> <property name="horizontalScrollBarPolicy">
> <enum>Qt::ScrollBarAlwaysOff</enum>
> </property>
> <property name="acceptRichText">
> <bool>true</bool>
> </property>
> </widget>
> <widget class="QTextEdit" name="txt1_6">
> <property name="geometry">
> <rect>
> <x>196</x>
> <y>86</y>
> <width>83</width>
> <height>65</height>
> </rect>
> </property>
> <property name="font">
> <font>
> <family>Courier</family>
> <pointsize>12</pointsize>
> <weight>50</weight>
> <bold>false</bold>
> </font>
> </property>
> <property name="acceptDrops">
> <bool>false</bool>
> </property>
> <property name="styleSheet">
> <string notr="true">color: rgb(0, 0, 127);
> background-color: rgb(255, 255, 127);</string>
> </property>
> <property name="frameShape">
> <enum>QFrame::StyledPanel</enum>
> </property>
> <property name="frameShadow">
> <enum>QFrame::Sunken</enum>
> </property>
> <property name="horizontalScrollBarPolicy">
> <enum>Qt::ScrollBarAlwaysOff</enum>
> </property>
> <property name="acceptRichText">
> <bool>true</bool>
> </property>
> </widget>
> <widget class="QTextEdit" name="txt1_7">
> <property name="geometry">
> <rect>
> <x>32</x>
> <y>150</y>
> <width>83</width>
> <height>65</height>
> </rect>
> </property>
> <property name="font">
> <font>
> <family>Courier</family>
> <pointsize>12</pointsize>
> <weight>50</weight>
> <bold>false</bold>
> </font>
> </property>
> <property name="acceptDrops">
> <bool>false</bool>
> </property>
> <property name="styleSheet">
> <string notr="true">color: rgb(0, 0, 127);
> background-color: rgb(255, 255, 127);</string>
> </property>
> <property name="frameShape">
> <enum>QFrame::StyledPanel</enum>
> </property>
> <property name="frameShadow">
> <enum>QFrame::Sunken</enum>
> </property>
> <property name="horizontalScrollBarPolicy">
> <enum>Qt::ScrollBarAlwaysOff</enum>
> </property>
> <property name="acceptRichText">
> <bool>true</bool>
> </property>
> </widget>
> <widget class="QTextEdit" name="txt1_8">
> <property name="geometry">
> <rect>
> <x>114</x>
> <y>150</y>
> <width>83</width>
> <height>65</height>
> </rect>
> </property>
> <property name="font">
> <font>
> <family>Courier</family>
> <pointsize>12</pointsize>
> <weight>50</weight>
> <bold>false</bold>
> </font>
> </property>
> <property name="acceptDrops">
> <bool>false</bool>
> </property>
> <property name="styleSheet">
> <string notr="true">color: rgb(0, 0, 127);
> background-color: rgb(255, 255, 127);</string>
> </property>
> <property name="frameShape">
> <enum>QFrame::StyledPanel</enum>
> </property>
> <property name="frameShadow">
> <enum>QFrame::Sunken</enum>
> </property>
> <property name="horizontalScrollBarPolicy">
> <enum>Qt::ScrollBarAlwaysOff</enum>
> </property>
> <property name="acceptRichText">
> <bool>true</bool>
> </property>
> </widget>
> <widget class="QPushButton" name="btnPopulate">
> <property name="geometry">
> <rect>
> <x>32</x>
> <y>228</y>
> <width>121</width>
> <height>35</height>
> </rect>
> </property>
> <property name="text">
> <string>Populate with numbers</string>
> </property>
> </widget>
> <widget class="QTextEdit" name="txt1_9">
> <property name="geometry">
> <rect>
> <x>196</x>
> <y>150</y>
> <width>83</width>
> <height>65</height>
> </rect>
> </property>
> <property name="font">
> <font>
> <family>Courier</family>
> <pointsize>12</pointsize>
> <weight>50</weight>
> <bold>false</bold>
> </font>
> </property>
> <property name="acceptDrops">
> <bool>false</bool>
> </property>
> <property name="styleSheet">
> <string notr="true">color: rgb(0, 0, 127);
> background-color: rgb(255, 255, 127);</string>
> </property>
> <property name="frameShape">
> <enum>QFrame::StyledPanel</enum>
> </property>
> <property name="frameShadow">
> <enum>QFrame::Sunken</enum>
> </property>
> <property name="horizontalScrollBarPolicy">
> <enum>Qt::ScrollBarAlwaysOff</enum>
> </property>
> <property name="acceptRichText">
> <bool>true</bool>
> </property>
> </widget>
> <widget class="QPushButton" name="btnReadContents">
> <property name="geometry">
> <rect>
> <x>170</x>
> <y>228</y>
> <width>109</width>
> <height>35</height>
> </rect>
> </property>
> <property name="text">
> <string>Read contents</string>
> </property>
> </widget>
> </widget>
> <widget class="QStatusBar" name="statusbar"/>
> </widget>
> <resources/>
> <connections/>
> </ui>
>
> =====================================================================
Thank you,
I'll try to use this QTextEdit, to see if I'm able to manage my needs.
Regards
Mohsen
More information about the Python-list
mailing list