Free OCR package in Python and selecting appropriate widget for the GUI
DFS
nospam at dfs.com
Wed Sep 22 03:41:31 EDT 2021
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>
=====================================================================
More information about the Python-list
mailing list