Skip to content

Commit fe3276c

Browse files
Sharif ShakerSharif Shaker
Sharif Shaker
authored and
Sharif Shaker
committed
First commit
0 parents  commit fe3276c

11 files changed

+1205
-0
lines changed

GraphControlPanelGui.py

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
2+
from PyQt5 import QtCore, QtGui, QtWidgets
3+
4+
''' Graph GUI
5+
6+
Author: Sharif Shaker
7+
Date: 4/29/2017
8+
9+
Modified:
10+
Changes made:
11+
12+
Description:
13+
This file contains various classes and functions for displaying a graphical panel for controling various functions to
14+
be run on a GraphScene object. The control panel design was done using QtDesigner
15+
16+
'''
17+
18+
class Ui_GraphControlWindow(object):
19+
def setupUi(self, GraphControlWindow, graph_scene):
20+
21+
self.scene = graph_scene # get a GraphScene object from parameter
22+
23+
# set up layouts, labels, text editors, and buttons
24+
GraphControlWindow.setObjectName("GraphControlWindow")
25+
GraphControlWindow.resize(483, 600)
26+
self.verticalLayout_2 = QtWidgets.QVBoxLayout(GraphControlWindow)
27+
self.verticalLayout_2.setObjectName("verticalLayout_2")
28+
self.add_edge_lab = QtWidgets.QLabel(GraphControlWindow)
29+
font = QtGui.QFont()
30+
font.setPointSize(12)
31+
font.setBold(True)
32+
font.setWeight(75)
33+
self.add_edge_lab.setFont(font)
34+
self.add_edge_lab.setLayoutDirection(QtCore.Qt.LeftToRight)
35+
self.add_edge_lab.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignHCenter)
36+
self.add_edge_lab.setObjectName("add_edge_lab")
37+
self.verticalLayout_2.addWidget(self.add_edge_lab)
38+
self.horizontalLayout = QtWidgets.QHBoxLayout()
39+
self.horizontalLayout.setObjectName("horizontalLayout")
40+
self.label_2 = QtWidgets.QLabel(GraphControlWindow)
41+
self.label_2.setText("")
42+
self.label_2.setObjectName("label_2")
43+
self.horizontalLayout.addWidget(self.label_2)
44+
self.add_edge1_lab = QtWidgets.QLabel(GraphControlWindow)
45+
self.add_edge1_lab.setObjectName("add_edge1_lab")
46+
self.horizontalLayout.addWidget(self.add_edge1_lab)
47+
self.add_edge1_edit = QtWidgets.QLineEdit(GraphControlWindow)
48+
self.add_edge1_edit.setObjectName("add_edge1_edit")
49+
self.horizontalLayout.addWidget(self.add_edge1_edit)
50+
self.add_edge2_lab = QtWidgets.QLabel(GraphControlWindow)
51+
self.add_edge2_lab.setObjectName("add_edge2_lab")
52+
self.horizontalLayout.addWidget(self.add_edge2_lab)
53+
self.add_edge2_edit = QtWidgets.QLineEdit(GraphControlWindow)
54+
self.add_edge2_edit.setObjectName("add_edge2_edit")
55+
self.horizontalLayout.addWidget(self.add_edge2_edit)
56+
self.add_edge_weight_lab = QtWidgets.QLabel(GraphControlWindow)
57+
self.add_edge_weight_lab.setObjectName("add_edge_weight_lab")
58+
self.horizontalLayout.addWidget(self.add_edge_weight_lab)
59+
self.add_edge_weight_edit = QtWidgets.QLineEdit(GraphControlWindow)
60+
self.add_edge_weight_edit.setObjectName("add_edge_weight_edit")
61+
self.horizontalLayout.addWidget(self.add_edge_weight_edit)
62+
self.verticalLayout_2.addLayout(self.horizontalLayout)
63+
self.add_edge_btn = QtWidgets.QPushButton(GraphControlWindow)
64+
self.add_edge_btn.setObjectName("add_edge_btn")
65+
self.verticalLayout_2.addWidget(self.add_edge_btn)
66+
self.remove_edge_lab = QtWidgets.QLabel(GraphControlWindow)
67+
font = QtGui.QFont()
68+
font.setPointSize(12)
69+
font.setBold(True)
70+
font.setWeight(75)
71+
self.remove_edge_lab.setFont(font)
72+
self.remove_edge_lab.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignHCenter)
73+
self.remove_edge_lab.setObjectName("remove_edge_lab")
74+
self.verticalLayout_2.addWidget(self.remove_edge_lab)
75+
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
76+
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
77+
self.remove_edge1_lab = QtWidgets.QLabel(GraphControlWindow)
78+
self.remove_edge1_lab.setObjectName("remove_edge1_lab")
79+
self.horizontalLayout_2.addWidget(self.remove_edge1_lab)
80+
self.remove_edge1_edit = QtWidgets.QLineEdit(GraphControlWindow)
81+
self.remove_edge1_edit.setObjectName("remove_edge1_edit")
82+
self.horizontalLayout_2.addWidget(self.remove_edge1_edit)
83+
self.remove_edge2_lab = QtWidgets.QLabel(GraphControlWindow)
84+
self.remove_edge2_lab.setObjectName("remove_edge2_lab")
85+
self.horizontalLayout_2.addWidget(self.remove_edge2_lab)
86+
self.remove_edge2_edit = QtWidgets.QLineEdit(GraphControlWindow)
87+
self.remove_edge2_edit.setObjectName("remove_edge2_edit")
88+
self.horizontalLayout_2.addWidget(self.remove_edge2_edit)
89+
spacerItem = QtWidgets.QSpacerItem(240, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
90+
self.horizontalLayout_2.addItem(spacerItem)
91+
self.verticalLayout_2.addLayout(self.horizontalLayout_2)
92+
self.remove_edge_btn = QtWidgets.QPushButton(GraphControlWindow)
93+
self.remove_edge_btn.setObjectName("remove_edge_btn")
94+
self.verticalLayout_2.addWidget(self.remove_edge_btn)
95+
self.remove_node_lab_2 = QtWidgets.QLabel(GraphControlWindow)
96+
font = QtGui.QFont()
97+
font.setPointSize(12)
98+
font.setBold(True)
99+
font.setWeight(75)
100+
self.remove_node_lab_2.setFont(font)
101+
self.remove_node_lab_2.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignHCenter)
102+
self.remove_node_lab_2.setObjectName("remove_node_lab_2")
103+
self.verticalLayout_2.addWidget(self.remove_node_lab_2)
104+
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
105+
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
106+
self.remove_node_lab = QtWidgets.QLabel(GraphControlWindow)
107+
self.remove_node_lab.setObjectName("remove_node_lab")
108+
self.horizontalLayout_3.addWidget(self.remove_node_lab)
109+
self.remove_node_edit = QtWidgets.QLineEdit(GraphControlWindow)
110+
self.remove_node_edit.setObjectName("remove_node_edit")
111+
self.horizontalLayout_3.addWidget(self.remove_node_edit)
112+
spacerItem1 = QtWidgets.QSpacerItem(430, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
113+
self.horizontalLayout_3.addItem(spacerItem1)
114+
self.verticalLayout_2.addLayout(self.horizontalLayout_3)
115+
self.remove_node_btn = QtWidgets.QPushButton(GraphControlWindow)
116+
self.remove_node_btn.setObjectName("remove_node_btn")
117+
self.verticalLayout_2.addWidget(self.remove_node_btn)
118+
self.display_path_header = QtWidgets.QLabel(GraphControlWindow)
119+
font = QtGui.QFont()
120+
font.setPointSize(12)
121+
font.setBold(True)
122+
font.setWeight(75)
123+
self.display_path_header.setFont(font)
124+
self.display_path_header.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignHCenter)
125+
self.display_path_header.setObjectName("display_path_header")
126+
self.verticalLayout_2.addWidget(self.display_path_header)
127+
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
128+
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
129+
self.path_node1_lab = QtWidgets.QLabel(GraphControlWindow)
130+
self.path_node1_lab.setObjectName("path_node1_lab")
131+
self.horizontalLayout_4.addWidget(self.path_node1_lab)
132+
self.path_node1_edit = QtWidgets.QLineEdit(GraphControlWindow)
133+
self.path_node1_edit.setObjectName("path_node1_edit")
134+
self.horizontalLayout_4.addWidget(self.path_node1_edit)
135+
self.path_node2_lab = QtWidgets.QLabel(GraphControlWindow)
136+
self.path_node2_lab.setObjectName("path_node2_lab")
137+
self.horizontalLayout_4.addWidget(self.path_node2_lab)
138+
self.path_node2_edit = QtWidgets.QLineEdit(GraphControlWindow)
139+
self.path_node2_edit.setObjectName("path_node2_edit")
140+
self.horizontalLayout_4.addWidget(self.path_node2_edit)
141+
spacerItem2 = QtWidgets.QSpacerItem(230, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
142+
self.horizontalLayout_4.addItem(spacerItem2)
143+
self.verticalLayout_2.addLayout(self.horizontalLayout_4)
144+
self.find_path_btn = QtWidgets.QPushButton(GraphControlWindow)
145+
self.find_path_btn.setObjectName("find_path_btn")
146+
self.verticalLayout_2.addWidget(self.find_path_btn)
147+
self.clear_path_btn = QtWidgets.QPushButton(GraphControlWindow)
148+
self.clear_path_btn.setObjectName("clear_path_btn")
149+
self.verticalLayout_2.addWidget(self.clear_path_btn)
150+
151+
self.retranslateUi(GraphControlWindow)
152+
153+
QtCore.QMetaObject.connectSlotsByName(GraphControlWindow)
154+
self.init_buttons()
155+
156+
157+
158+
def init_buttons(self):
159+
# connect buttons and text edit values to various GraphScene functions
160+
self.add_edge_btn.clicked.connect(lambda: self.scene.add_edge(self.add_edge1_edit.text(),
161+
self.add_edge2_edit.text(), self.add_edge_weight_edit.text())) # add edge
162+
163+
self.remove_edge_btn.clicked.connect(lambda: self.scene.remove_edge(self.remove_edge1_edit.text(),
164+
self.remove_edge2_edit.text())) # remove edge
165+
166+
self.remove_node_btn.clicked.connect(lambda: self.scene.remove_node(self.remove_node_edit.text())) # remove node
167+
168+
self.find_path_btn.clicked.connect(lambda: self.show_selected_path()) # show path using selected algorithm
169+
170+
self.clear_path_btn.clicked.connect(lambda: self.scene.delete_shortest_path()) # clear path
171+
172+
173+
def show_selected_path(self):
174+
algo = self.scene.current_path_algo # get the current algorithm being used by GraphScene
175+
176+
if algo == 'DIJKSTRA': # if using dijkstra
177+
# run dijkstra on GraphScene with values from text edit boxes
178+
self.scene.show_shortest_path_dijkstra(self.path_node1_edit.text(), self.path_node2_edit.text())
179+
elif algo == 'PRIMS': # if using prims
180+
self.scene.show_mst_prims() # run prims on GraphScene
181+
182+
183+
184+
def retranslateUi(self, GraphControlWindow):
185+
_translate = QtCore.QCoreApplication.translate
186+
187+
# complete setup by adding text labels
188+
GraphControlWindow.setWindowTitle(_translate("GraphControlWindow", "Graph Control WIndow"))
189+
self.add_edge_lab.setText(_translate("GraphControlWindow", "-Add Edge-"))
190+
self.add_edge1_lab.setText(_translate("GraphControlWindow", "Node 1:"))
191+
self.add_edge2_lab.setText(_translate("GraphControlWindow", "Node 2:"))
192+
self.add_edge_weight_lab.setText(_translate("GraphControlWindow", "Weight:"))
193+
self.add_edge_btn.setText(_translate("GraphControlWindow", "ADD EDGE"))
194+
self.remove_edge_lab.setText(_translate("GraphControlWindow", "-Delete Edge-"))
195+
self.remove_edge1_lab.setText(_translate("GraphControlWindow", "Node 1:"))
196+
self.remove_edge2_lab.setText(_translate("GraphControlWindow", "Node 2:"))
197+
self.remove_edge_btn.setText(_translate("GraphControlWindow", "REMOVE EDGE"))
198+
self.remove_node_lab_2.setText(_translate("GraphControlWindow", "-Delete Node-"))
199+
self.remove_node_lab.setText(_translate("GraphControlWindow", "Node:"))
200+
self.remove_node_btn.setText(_translate("GraphControlWindow", "REMOVE NODE"))
201+
self.display_path_header.setText(_translate("GraphControlWindow", "-Display Path-"))
202+
self.path_node1_lab.setText(_translate("GraphControlWindow", "Node 1:"))
203+
self.path_node2_lab.setText(_translate("GraphControlWindow", "Node 2:"))
204+
self.find_path_btn.setText(_translate("GraphControlWindow", "SHOW PATH"))
205+
self.clear_path_btn.setText(_translate("GraphControlWindow", "CLEAR PATH"))
206+
207+

0 commit comments

Comments
 (0)