from
PyQt5.QtWidgets
import
*
from
PyQt5
import
QtCore, QtGui
from
PyQt5.QtGui
import
*
from
PyQt5.QtCore
import
*
import
sys
class
Window(QMainWindow):
number
=
[
10
,
12
,
13
,
16
,
18
,
19
,
20
,
21
,
22
,
23
,
24
,
33
,
35
,
42
,
47
]
desired
=
24
def
__init__(
self
):
super
().__init__()
self
.setWindowTitle(
"Interpolation Search "
)
self
.setGeometry(
100
,
100
,
600
,
400
)
self
.UiComponents()
self
.show()
def
UiComponents(
self
):
self
.start
=
False
self
.label_list
=
[]
self
.position
=
0
self
.lo
=
0
self
.hi
=
len
(
self
.number)
-
1
c
=
0
for
i
in
self
.number:
label
=
QLabel(
str
(i),
self
)
label.setStyleSheet("border :
1px
solid black;
background : white;")
label.setAlignment(Qt.AlignTop)
label.setGeometry(
50
+
c
*
30
,
50
,
20
, i
*
2
+
10
)
self
.label_list.append(label)
c
=
c
+
1
self
.search_button
=
QPushButton(
"Start Search"
,
self
)
self
.search_button.setGeometry(
100
,
270
,
100
,
30
)
self
.search_button.clicked.connect(
self
.search_action)
pause_button
=
QPushButton(
"Pause"
,
self
)
pause_button.setGeometry(
100
,
320
,
100
,
30
)
pause_button.clicked.connect(
self
.pause_action)
self
.result
=
QLabel(
"To search : "
+
str
(
self
.desired),
self
)
self
.result.setGeometry(
350
,
280
,
200
,
40
)
self
.result.setStyleSheet(
"border : 3px solid black;"
)
self
.result.setFont(QFont(
'Times'
,
10
))
self
.result.setAlignment(Qt.AlignCenter)
timer
=
QTimer(
self
)
timer.timeout.connect(
self
.showTime)
timer.start(
200
)
def
showTime(
self
):
if
self
.start:
if
(
self
.desired <
self
.number[
self
.lo]
or
self
.desired >
self
.number[
self
.hi]):
self
.start
=
False
self
.result.setText(
"Not Found"
)
if
self
.lo >
self
.hi:
self
.start
=
False
self
.result.setText(
"Not Found"
)
else
:
if
self
.lo
=
=
self
.hi:
if
self
.number[
self
.lo]
=
=
self
.desired:
self
.result.setText(
"Found at index : "
+
str
(
self
.lo))
self
.label_list[
self
.lo].setStyleSheet(
"border : 2px solid green;"
"background-color : lightgreen;"
)
else
:
self
.label_list[
self
.lo].setStyleSheet(
"border : 1px solid black;"
"background-color : grey;"
)
self
.position
=
self
.lo
+
int
(((
float
(
self
.hi
-
self
.lo)
/
(
self
.number[
self
.hi]
-
self
.number[
self
.lo]))
*
(
self
.desired
-
self
.number[
self
.lo])))
if
self
.number[
self
.position]
=
=
self
.desired:
self
.start
=
False
self
.result.setText(
"Found at position : "
+
str
(
self
.position))
self
.label_list[
self
.position].setStyleSheet(
"border : 2px solid green;"
"background-color : lightgreen;"
)
else
:
self
.label_list[
self
.position].setStyleSheet(
"border : 1px solid black;"
"background-color : grey;"
)
if
self
.number[
self
.position] <
self
.desired:
self
.lo
=
self
.position
+
1
else
:
self
.hi
=
self
.position
-
1
def
search_action(
self
):
self
.start
=
True
self
.result.setText(
"Started searching..."
)
def
pause_action(
self
):
self
.start
=
False
self
.result.setText(
"Paused"
)
App
=
QApplication(sys.argv)
window
=
Window()
sys.exit(App.
exec
())