Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from PyQt5.QtWidgets import QApplication, QWidget
- from PyQt5.QtGui import QIcon
- from PyQt5.QtWidgets import QLabel, QGridLayout
- from PyQt5.QtWidgets import QLineEdit, QPushButton, QHBoxLayout
- from PyQt5.QtWidgets import QMessageBox
- from PyQt5.QtCore import Qt
- graph = {'Kraków': ['Zawiercie', 'Miechów'],
- 'Miechów':['Kraków', 'Tunel'],
- 'Tunel': ['Miechów', 'Kozłów', 'Charsznica'],
- 'Kozłów': ['Tunel', 'Kielce', 'Ostrowiec'],
- 'Kielce': ['Kozłów'],
- 'Ostrowiec': ['Kozłów', 'Częstochowa'],
- 'Charsznica': ['Tunel', 'Włoszczowa', 'Wolbrom'],
- 'Włoszczowa': ['Charsznica', 'Częstochowa'],
- 'Częstochowa':['Ostrowiec', 'Włoszczowa'],
- 'Zawiercie': ['Kraków', 'Dąbrowa'],
- 'Dąbrowa': ['Zawiercie', 'Katowice', 'Wolbrom'],
- 'Wolbrom': ['Charsznica', 'Dąbrowa'],
- 'Katowice':['Dąbrowa'],
- 'Sosnowiec': []}
- class Okno(QWidget):
- def __init__(self, parent=None):
- super().__init__(parent)
- self.interfejs()
- def interfejs(self):
- #ETYKIETY
- etykieta1 = QLabel("MIASTO POCZĄTKOWE:", self)
- etykieta2 = QLabel("MIASTO KOŃCOWE:", self)
- etykieta3 = QLabel("ZNALEZIONE POŁĄCZENIE:", self)
- #PRZYPISANIE WIDGETÓW DO UKŁADU TABELARYCZNEGO
- uklad_tabelaryczny=QGridLayout()
- uklad_tabelaryczny.addWidget(etykieta1,0,2)
- uklad_tabelaryczny.addWidget(etykieta2,2,2)
- uklad_tabelaryczny.addWidget(etykieta3,4,2)
- #LINIOWE POLA EDYCYJNE
- self.miasto_startowe = QLineEdit()
- self.miasto_koncowe = QLineEdit()
- self.wynik = QLineEdit()
- self.wynik.readonly = True
- self.wynik.setToolTip('')
- #UMIESZCZENIE NA UKŁADZIE TABELATYCZNYM
- uklad_tabelaryczny.addWidget(self.miasto_startowe,1,2)
- uklad_tabelaryczny.addWidget(self.miasto_koncowe,3,2)
- uklad_tabelaryczny.addWidget(self.wynik,5,2)
- se_przycisk = QPushButton("&SZUKAJ", self)
- end_przycisk = QPushButton("&ZAMKNIJ", self)
- end_przycisk.resize(end_przycisk.sizeHint())
- uklad_tabelaryczny.addWidget(se_przycisk,6,1,1,2)
- uklad_tabelaryczny.addWidget(end_przycisk,6,3,1,2)
- #PRZYPISANIE UTWORZONEGO UKŁADU DO OKNA
- self.setLayout(uklad_tabelaryczny)
- #OBSŁUGA PRZYCISKÓW
- end_przycisk.clicked.connect(self.zakoncz)
- se_przycisk.clicked.connect(self.szukaj_trasy)
- self.setGeometry(400,200,400, 200)
- self.setWindowIcon(QIcon('pociag.png'))
- self.setWindowTitle("Wyszukiwarka połączeń kolejowych")
- self.show()
- #STARTOWY NAPIS W POLU ZE ZNALEZIONĄ TRASĄ
- wyniki = ("TU POJAWI SIĘ TWOJE ZNALEZIONE POŁĄCZENIE:")
- self.wynik.setText(str(wyniki))
- #ZAKOŃCZENIE PROGRAMU - PRZYCISKIEM 'ZAKOŃCZ' I KLAWISZEM ESCAPE
- def zakoncz(self):
- self.close()
- def keyPressEvent(self, e):
- if e.key() == Qt.Key_Escape:
- self.close()
- def szukaj_trasy(self):
- nadawca = self.sender()
- ms=str(self.miasto_startowe.text())
- mk=str(self.miasto_koncowe.text())
- #try:
- if nadawca.text() == "&SZUKAJ":
- połączenie = ""
- if ms == mk:
- połączenie = "MIASTO STARTOWE MUSI BYĆ INNE NIŻ KOŃCOWE!"
- self.wynik.setText(str(połączenie))
- return
- trasy = list(self.BFS(graph, ms, mk))
- if(trasy[0] == "0"):
- połączenie = "ZADANE POŁĄCZENIE NIE ISTNIEJE!"
- self.wynik.setText(str(połączenie))
- return
- for i in range(0,len(trasy)):
- połączenie+=trasy[i]
- if i != len(trasy)-1:
- połączenie+="->"
- self.wynik.setText(str(połączenie))
- return
- def BFS(self, graph, start, goal): #Wyszukiwanie połączeń
- odwiedzone = [] # keep track of explored nodes
- queue = [[start]] # keep track of all the paths to be checked
- while queue: # keeps looping until all possible paths have been checked
- path = queue.pop(0) # pop the first path from the queue
- # get the last node from the path
- node = path[-1]
- if node not in odwiedzone:
- neighbours = graph[node]
- # go through all neighbour nodes, construct a new path and
- # push it into the queue
- for neighbour in neighbours:
- new_path = list(path)
- new_path.append(neighbour)
- queue.append(new_path)
- # return path if neighbour is goal
- if neighbour == goal:
- return new_path
- # mark node as explored
- odwiedzone.append(node)
- # in case there's no path between the 2 nodes
- return "0"
- if __name__ == '__main__':
- import sys
- app = QApplication(sys.argv)
- okno = Okno()
- sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement