Advertisement
Guest User

Starsza_wersja

a guest
Jun 19th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.14 KB | None | 0 0
  1. from PyQt5.QtWidgets import QApplication, QWidget
  2. from PyQt5.QtGui import QIcon
  3. from PyQt5.QtWidgets import QLabel, QGridLayout
  4. from PyQt5.QtWidgets import QLineEdit, QPushButton, QHBoxLayout
  5. from PyQt5.QtWidgets import QMessageBox
  6. from PyQt5.QtCore import Qt
  7.  
  8.  
  9. graph = {'Kraków': ['Zawiercie', 'Miechów'],
  10. 'Miechów':['Kraków', 'Tunel'],
  11. 'Tunel': ['Miechów', 'Kozłów', 'Charsznica'],
  12. 'Kozłów': ['Tunel', 'Kielce', 'Ostrowiec'],
  13. 'Kielce': ['Kozłów'],
  14. 'Ostrowiec': ['Kozłów', 'Częstochowa'],
  15. 'Charsznica': ['Tunel', 'Włoszczowa', 'Wolbrom'],
  16. 'Włoszczowa': ['Charsznica', 'Częstochowa'],
  17. 'Częstochowa':['Ostrowiec', 'Włoszczowa'],
  18. 'Zawiercie': ['Kraków', 'Dąbrowa'],
  19. 'Dąbrowa': ['Zawiercie', 'Katowice', 'Wolbrom'],
  20. 'Wolbrom': ['Charsznica', 'Dąbrowa'],
  21. 'Katowice':['Dąbrowa'],
  22. 'Sosnowiec': []}
  23.  
  24.  
  25.  
  26. class Okno(QWidget):
  27.  
  28. def __init__(self, parent=None):
  29. super().__init__(parent)
  30. self.interfejs()
  31.  
  32.  
  33. def interfejs(self):
  34.  
  35. #ETYKIETY
  36. etykieta1 = QLabel("MIASTO POCZĄTKOWE:", self)
  37. etykieta2 = QLabel("MIASTO KOŃCOWE:", self)
  38. etykieta3 = QLabel("ZNALEZIONE POŁĄCZENIE:", self)
  39.  
  40. #PRZYPISANIE WIDGETÓW DO UKŁADU TABELARYCZNEGO
  41. uklad_tabelaryczny=QGridLayout()
  42. uklad_tabelaryczny.addWidget(etykieta1,0,2)
  43. uklad_tabelaryczny.addWidget(etykieta2,2,2)
  44. uklad_tabelaryczny.addWidget(etykieta3,4,2)
  45.  
  46. #LINIOWE POLA EDYCYJNE
  47. self.miasto_startowe = QLineEdit()
  48. self.miasto_koncowe = QLineEdit()
  49. self.wynik = QLineEdit()
  50.  
  51. self.wynik.readonly = True
  52. self.wynik.setToolTip('')
  53.  
  54. #UMIESZCZENIE NA UKŁADZIE TABELATYCZNYM
  55. uklad_tabelaryczny.addWidget(self.miasto_startowe,1,2)
  56. uklad_tabelaryczny.addWidget(self.miasto_koncowe,3,2)
  57. uklad_tabelaryczny.addWidget(self.wynik,5,2)
  58. se_przycisk = QPushButton("&SZUKAJ", self)
  59. end_przycisk = QPushButton("&ZAMKNIJ", self)
  60. end_przycisk.resize(end_przycisk.sizeHint())
  61. uklad_tabelaryczny.addWidget(se_przycisk,6,1,1,2)
  62. uklad_tabelaryczny.addWidget(end_przycisk,6,3,1,2)
  63.  
  64. #PRZYPISANIE UTWORZONEGO UKŁADU DO OKNA
  65. self.setLayout(uklad_tabelaryczny)
  66.  
  67. #OBSŁUGA PRZYCISKÓW
  68. end_przycisk.clicked.connect(self.zakoncz)
  69. se_przycisk.clicked.connect(self.szukaj_trasy)
  70.  
  71.  
  72. self.setGeometry(400,200,400, 200)
  73. self.setWindowIcon(QIcon('pociag.png'))
  74. self.setWindowTitle("Wyszukiwarka połączeń kolejowych")
  75. self.show()
  76.  
  77. #STARTOWY NAPIS W POLU ZE ZNALEZIONĄ TRASĄ
  78. wyniki = ("TU POJAWI SIĘ TWOJE ZNALEZIONE POŁĄCZENIE:")
  79.  
  80. self.wynik.setText(str(wyniki))
  81.  
  82. #ZAKOŃCZENIE PROGRAMU - PRZYCISKIEM 'ZAKOŃCZ' I KLAWISZEM ESCAPE
  83. def zakoncz(self):
  84. self.close()
  85.  
  86. def keyPressEvent(self, e):
  87. if e.key() == Qt.Key_Escape:
  88. self.close()
  89.  
  90.  
  91.  
  92.  
  93. def szukaj_trasy(self):
  94.  
  95. nadawca = self.sender()
  96. ms=str(self.miasto_startowe.text())
  97. mk=str(self.miasto_koncowe.text())
  98.  
  99. #try:
  100. if nadawca.text() == "&SZUKAJ":
  101. połączenie = ""
  102. if ms == mk:
  103. połączenie = "MIASTO STARTOWE MUSI BYĆ INNE NIŻ KOŃCOWE!"
  104. self.wynik.setText(str(połączenie))
  105. return
  106.  
  107. trasy = list(self.BFS(graph, ms, mk))
  108. if(trasy[0] == "0"):
  109. połączenie = "ZADANE POŁĄCZENIE NIE ISTNIEJE!"
  110. self.wynik.setText(str(połączenie))
  111. return
  112.  
  113. for i in range(0,len(trasy)):
  114. połączenie+=trasy[i]
  115. if i != len(trasy)-1:
  116. połączenie+="->"
  117. self.wynik.setText(str(połączenie))
  118. return
  119.  
  120.  
  121. def BFS(self, graph, start, goal): #Wyszukiwanie połączeń
  122.  
  123. odwiedzone = [] # keep track of explored nodes
  124. queue = [[start]] # keep track of all the paths to be checked
  125. while queue: # keeps looping until all possible paths have been checked
  126. path = queue.pop(0) # pop the first path from the queue
  127. # get the last node from the path
  128. node = path[-1]
  129. if node not in odwiedzone:
  130. neighbours = graph[node]
  131. # go through all neighbour nodes, construct a new path and
  132. # push it into the queue
  133. for neighbour in neighbours:
  134. new_path = list(path)
  135. new_path.append(neighbour)
  136. queue.append(new_path)
  137. # return path if neighbour is goal
  138. if neighbour == goal:
  139. return new_path
  140.  
  141. # mark node as explored
  142. odwiedzone.append(node)
  143. # in case there's no path between the 2 nodes
  144. return "0"
  145.  
  146.  
  147.  
  148. if __name__ == '__main__':
  149. import sys
  150.  
  151. app = QApplication(sys.argv)
  152. okno = Okno()
  153. sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement