class main_window(QMainWindow): def __init__(self, app): self.app = app self.points = 0 #current model self.current_model = 0 self.pca_model = PCA(n_components=2) super(main_window, self).__init__() #==================# MAIN WIDGET LAYOUT #==================# #Big window self.widget = QtWidgets.QWidget() self.setCentralWidget(self.widget) self.widget.setLayout(QtWidgets.QGridLayout()) self.widget.layout().setContentsMargins(50, 10, 50, 20) self.widget.layout().setSpacing(10) self.widget.layout().setColumnStretch(0, 4) self.widget.layout().setColumnStretch(1, 5) self.widget.layout().setColumnStretch(2, 7) self.widget.layout().setRowStretch(0, 6) self.widget.layout().setRowStretch(1, 7) self.widget.layout().setRowStretch(2, 13) self.widget.layout().setRowStretch(3, 15) self.setWindowTitle("US Accidents Data Mining") self.showMaximized() #THEME COLOR self.setStyleSheet( "QMainWindow {background-image: url(background.jpg)}") print("Main window opened") # ==================# GROUP WIDGET LAYOUT #==================# # Small group0 (training) self.GroupBox0 = QGroupBox() self.layout0 = QGridLayout() self.GroupBox0.setLayout(self.layout0) self.layout0.setContentsMargins(20, 5, 20, 5) self.layout0.setSpacing(5) self.widget.layout().addWidget(self.GroupBox0, 0, 0, 2, 1) # Small group1 (predicting) self.GroupBox1 = QGroupBox() layout1 = QGridLayout() self.GroupBox1.setLayout(layout1) layout1.setContentsMargins(20, 5, 20, 5) layout1.setSpacing(5) self.widget.layout().addWidget(self.GroupBox1, 2, 0, 3, 1) #Small group (status) self.GroupBox_status = QGroupBox() self.layoutstatus = QGridLayout() self.GroupBox_status.setLayout(self.layoutstatus) self.layoutstatus.setContentsMargins(5, 5, 5, 5) self.layoutstatus.setSpacing(5) self.widget.layout().addWidget(self.GroupBox_status, 0, 1, 1, 1) # Small group2 (tabs) self.GroupBox2 = QGroupBox() layout2 = QGridLayout() self.GroupBox2.setLayout(layout2) layout2.setContentsMargins(5, 5, 5, 5) layout2.setSpacing(5) self.widget.layout().addWidget(self.GroupBox2, 1, 1, 2, 1) # Small group3 (summary of stats) self.GroupBox3 = QGroupBox() layout3 = QGridLayout() self.GroupBox3.setLayout(layout3) layout3.setContentsMargins(5, 5, 5, 5) layout3.setSpacing(5) self.widget.layout().addWidget(self.GroupBox3, 3, 1, 2, 2) # Small group4 (map) self.GroupBox4 = QGroupBox() self.layout4 = QGridLayout() self.GroupBox4.setLayout(self.layout4) self.layout4.setContentsMargins(5, 5, 5, 5) self.layout4.setSpacing(5) self.widget.layout().addWidget(self.GroupBox4, 0, 2, 3, 1) # ==================# GROUP 0 WIDGETS #==================# # Number of Samples self.num_samples = QLabel("Number of Samples:") self.layout0.addWidget(self.num_samples, 0, 0, 1, 1) self.SpinBox1 = QtWidgets.QSpinBox(self.widget) self.SpinBox1.setMaximum(2000000) self.SpinBox1.setMinimum(100) self.SpinBox1.setSingleStep(100) self.layout0.addWidget(self.SpinBox1, 0, 1, 1, 1) # Train Percent self.train_percent = QLabel("Train Split:") self.layout0.addWidget(self.train_percent, 1, 0, 1, 1) self.SpinBox2 = QtWidgets.QSpinBox(self.widget) self.SpinBox2.setMaximum(90) self.SpinBox2.setMinimum(70) self.SpinBox2.setSingleStep(10) self.SpinBox2.setSuffix("%") self.layout0.addWidget(self.SpinBox2, 1, 1, 1, 1) # Test Percent self.model_algorithm_label = QLabel("Algorithm:") self.layout0.addWidget(self.model_algorithm_label, 2, 0, 1, 1) self.model_algorithm_combo = QtWidgets.QComboBox(self.widget) self.model_algorithm_combo.addItem("Decision Trees") self.model_algorithm_combo.addItem("Random Forest") self.model_algorithm_combo.addItem("Logistic Regression") self.model_algorithm_combo.addItem("KNN") self.model_algorithm_combo.addItem("SVM") self.model_algorithm_combo.addItem("Naive Bayes") self.layout0.addWidget(self.model_algorithm_combo, 2, 1, 1, 1) # Model Accuracy self.accuracy = QLabel("Model Accuracy:") self.layout0.addWidget(self.accuracy, 3, 0, 1, 1) self.accuracy_display = QLCDNumber() self.accuracy_display.setMaximumHeight(50) self.accuracy_display.setSegmentStyle(QLCDNumber.Flat) self.layout0.addWidget(self.accuracy_display, 3, 1, 1, 1) # Train Model Button1 = QtWidgets.QPushButton(self.widget) Button1.setText("Train Model") Button1.clicked.connect(self.on_Button_train_clicked) self.layout0.addWidget(Button1, 4, 0, 1, 2) # ==================# GROUP 1 WIDGETS #==================# #Latitude #self.latitude = QLabel("Latitude:") #layout1.addWidget(self.latitude, 0, 0, 1, 1) #self.line_edit_latitude = QLineEdit() #self.line_edit_latitude.setPlaceholderText('Enter Latitude') #layout1.addWidget(self.line_edit_latitude, 0, 1, 1, 1) #Longitude #self.longitude = QLabel("Longitude:") #layout1.addWidget(self.longitude, 1, 0, 1, 1) #self.line_edit_longitude = QLineEdit() #self.line_edit_longitude.setPlaceholderText('Enter Longitude') #layout1.addWidget(self.line_edit_longitude, 1, 1, 1, 1) # Number # self.number = QLabel("Number:") # layout1.addWidget(self.number, 3, 0, 1, 1) # self.line_edit_number = QLineEdit() # self.line_edit_number.setPlaceholderText('Enter Number') # layout1.addWidget(self.line_edit_number, 3, 1, 1, 1) #Distance(mi) self.distance = QLabel("Distance (mi):") layout1.addWidget(self.distance, 2, 0, 1, 1) #### self.line_edit_distance = QtWidgets.QDoubleSpinBox(self.widget) self.line_edit_distance.setDecimals(4) self.line_edit_distance.setMaximum(100) self.line_edit_distance.setMinimum(0) self.line_edit_distance.setSingleStep(0.0001) self.line_edit_distance.setSuffix(" mi ") #self.line_edit_distance = QLineEdit() #self.line_edit_distance.setPlaceholderText('Enter Distance') layout1.addWidget(self.line_edit_distance, 2, 1, 1, 1) #Temperature self.temperature = QLabel("Temperature (F):") layout1.addWidget(self.temperature, 4, 0, 1, 1) #### self.line_edit_temperature = QtWidgets.QDoubleSpinBox(self.widget) self.line_edit_temperature.setMaximum(150) self.line_edit_temperature.setMinimum(-150) self.line_edit_temperature.setSuffix(" F ") #self.line_edit_temperature = QLineEdit() #self.line_edit_temperature.setPlaceholderText('Enter Temperature') layout1.addWidget(self.line_edit_temperature, 4, 1, 1, 1) #Wind Chill(F) self.wind_chill = QLabel("Wind Chill (F):") layout1.addWidget(self.wind_chill, 5, 0, 1, 1) #### self.line_edit_wind_chill = QtWidgets.QSpinBox(self.widget) self.line_edit_wind_chill.setMaximum(150) self.line_edit_wind_chill.setMinimum(-150) self.line_edit_wind_chill.setSuffix(" F ") #self.line_edit_wind_chill = QLineEdit() #self.line_edit_wind_chill.setPlaceholderText('Enter Wind Chill') layout1.addWidget(self.line_edit_wind_chill, 5, 1, 1, 1) #Humidity% self.humidity = QLabel("Humidity (%):") layout1.addWidget(self.humidity, 6, 0, 1, 1) #### self.line_edit_humidity = QtWidgets.QSpinBox(self.widget) self.line_edit_humidity.setMaximum(100) self.line_edit_humidity.setMinimum(0) self.line_edit_humidity.setSuffix(" % ") #self.line_edit_humidity = QLineEdit() #self.line_edit_humidity.setPlaceholderText('Enter Humidity') layout1.addWidget(self.line_edit_humidity, 6, 1, 1, 1) #Pressure(in) self.pressure = QLabel("Pressure (in):") layout1.addWidget(self.pressure, 7, 0, 1, 1) #### self.line_edit_pressure = QtWidgets.QSpinBox(self.widget) self.line_edit_pressure.setMaximum(150) self.line_edit_pressure.setMinimum(0) self.line_edit_pressure.setSuffix(" in ") #self.line_edit_pressure = QLineEdit() #self.line_edit_pressure.setPlaceholderText('Enter Pressure') layout1.addWidget(self.line_edit_pressure, 7, 1, 1, 1) #Visibility(mi) self.visibility = QLabel("Visibility (mi):") layout1.addWidget(self.visibility, 8, 0, 1, 1) #### self.line_edit_visibility = QtWidgets.QSpinBox(self.widget) self.line_edit_visibility.setMaximum(100) self.line_edit_visibility.setMinimum(0) self.line_edit_visibility.setSuffix(" mi ") #self.line_edit_visibility = QLineEdit() #self.line_edit_visibility.setPlaceholderText('Enter Visibility') layout1.addWidget(self.line_edit_visibility, 8, 1, 1, 1) #Wind Speed(mph) self.wind_speed = QLabel("Wind Speed (mph):") layout1.addWidget(self.wind_speed, 9, 0, 1, 1) #### self.line_edit_wind_speed = QtWidgets.QSpinBox(self.widget) self.line_edit_wind_speed.setMaximum(100) self.line_edit_wind_speed.setMinimum(0) self.line_edit_wind_speed.setSuffix(" mph") #self.line_edit_wind_speed = QLineEdit() #self.line_edit_wind_speed.setPlaceholderText('Enter Wind Speed') layout1.addWidget(self.line_edit_wind_speed, 9, 1, 1, 1) #Precipitation(in) self.precipitation = QLabel("Precipitation (in):") layout1.addWidget(self.precipitation, 10, 0, 1, 1) #### self.line_edit_precipitation = QtWidgets.QDoubleSpinBox(self.widget) self.line_edit_precipitation.setDecimals(4) self.line_edit_precipitation.setMaximum(100) self.line_edit_precipitation.setMinimum(0) self.line_edit_precipitation.setSingleStep(0.0001) self.line_edit_precipitation.setSuffix(" in ") #self.line_edit_precipitation = QLineEdit() #self.line_edit_precipitation.setPlaceholderText('Enter Precipitation') layout1.addWidget(self.line_edit_precipitation, 10, 1, 1, 1) # Severity self.severity = QLabel("Severity Prediction:") layout1.addWidget(self.severity, 11, 0, 1, 1) self.severity_display = QLCDNumber() self.severity_display.setMaximumHeight(50) self.severity_display.setSegmentStyle(QLCDNumber.Flat) layout1.addWidget(self.severity_display, 11, 1, 1, 1) # predict button Button_predict = QtWidgets.QPushButton(self.widget) Button_predict.setText("Predict Severity of Accident") Button_predict.clicked.connect(self.on_Button_predict_clicked) layout1.addWidget(Button_predict, 12, 0, 1, 2) # ==================# GROUP STATUS WIDGETS (STATUS LAYOUT) #==================# self.status_label_model = QPushButton(self.widget) self.status_label_model.setText("VIEW CURRENT MODEL") self.status_label_model.clicked.connect(self.on_Button_model_clicked) self.layoutstatus.addWidget(self.status_label_model, 0, 0, 1, 1) self.status_display_model = QLabel("NO MODEL") self.status_display_model.setStyleSheet( "QLabel { color: red ; font-weight: bold}") self.layoutstatus.addWidget(self.status_display_model, 1, 0, 1, 1) self.status_map = QPushButton(self.widget) self.status_map.setText("VIEW GEOMAP STATUS") self.status_map.clicked.connect(self.on_Button_geomap_clicked) self.layoutstatus.addWidget(self.status_map, 0, 1, 1, 1) self.status_display_map = QLabel("WAIT...") self.status_display_map.setStyleSheet( "QLabel { color: yellow ; font-weight: bold}") self.layoutstatus.addWidget(self.status_display_map, 1, 1, 1, 1) # ==================# GROUP 2 WIDGETS (TABS WIDGET LAYOUT) #==================# #Tabs # Initialize tab screen self.tabs = QTabWidget() self.tab0 = QWidget() self.tab1 = QWidget() self.tab2 = QWidget() self.tab3 = QWidget() #self.tabs.resize(300, 200) # Add tabs # tab0 self.tabs.addTab(self.tab0, "Correlogram") tab0_layout = QVBoxLayout(self) self.tab0.setLayout(tab0_layout) #tab1 self.tabs.addTab(self.tab1, "Histograms") tab1_layout = QVBoxLayout(self) self.tab1.setLayout(tab1_layout) # tab2 self.tabs.addTab(self.tab2, "Scatterplots") self.tab2_layout = QVBoxLayout(self) self.tab2.setLayout(self.tab2_layout) # tab3 self.tabs.addTab(self.tab3, "Test Set") self.tab3_layout = QVBoxLayout(self) self.tab3.setLayout(self.tab3_layout) # Add tabs to widget layout2.addWidget(self.tabs) # ==================# INDIVIDUAL TAB WIDGETS (INSIDE GROUP 2)#==================# # CORRELATION self.imageView0 = QLabel(self.widget) self.pixmap0 = QPixmap("analysis.png") self.imageView0.setPixmap(self.pixmap0) # scroller # self.scroll = QtWidgets.QScrollArea(self.widget) # self.scroll.setWidget(self.imageView) tab0_layout.addWidget(self.imageView0) # HISTOGRAMS self.imageView = QLabel(self.widget) self.pixmap = QPixmap("longblank.png") self.imageView.setPixmap(self.pixmap) # scroller self.scroll = QtWidgets.QScrollArea(self.widget) self.scroll.setWidget(self.imageView) self.scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) self.scroll.widgetResizable() tab1_layout.addWidget(self.scroll) #SCATTER self.imageView2 = QLabel(self.widget) self.pixmap2 = QPixmap("longblank.png") self.imageView2.setPixmap(self.pixmap2) # scroller self.scroll2 = QtWidgets.QScrollArea(self.widget) self.scroll2.setWidget(self.imageView2) self.scroll2.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.scroll2.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) self.scroll2.widgetResizable() self.tab2_layout.addWidget(self.scroll2) #TEST SET filename_test_set = os.path.expanduser( os.path.abspath( os.path.join(os.path.dirname(__file__), "X_test.csv"))) self.items_test_set = [] self.filename_test_set = filename_test_set self.model_test_set = QtGui.QStandardItemModel(self.widget) self.model_test_set.setHorizontalHeaderLabels([ "Distance(mi)", "Temperature(F)", "Wind_Chill(F)", "Humidity(%)", "Pressure(in)", "Visibility(mi)", "Wind_Speed(mph)", "Precipitation(in)", "Severity", "Prediction" ]) self.tableView_test_set = QTableView(self.widget) # self.tableView.setStyleSheet("QTableView{ background-color: rgb(45, 45, 45); }") # cell color self.tableView_test_set.horizontalHeader().setStretchLastSection(True) self.tableView_test_set.setEditTriggers( QAbstractItemView.NoEditTriggers) self.tableView_test_set.setModel(self.model_test_set) self.tab3_layout.addWidget(self.tableView_test_set) # ==================# GROUP 3 WIDGETS (TABLE DATABASE) #==================# filename = os.path.expanduser( os.path.abspath( os.path.join(os.path.dirname(__file__), "statistic_summary.csv"))) self.items = [] self.fileName = filename #self.on_Button1_clicked self.model = QtGui.QStandardItemModel(self.widget) self.model.setHorizontalHeaderLabels( ['Count', 'Mean', 'Std', 'Min', '25%', '50%', '75%', 'Max']) self.model.setVerticalHeaderLabels([ 'Severity', 'Latitude', 'Longitude', 'Distance(mi)', 'Number', 'Temperature', 'Wind Chill(F)', 'Humidity%', 'Pressure(in)', 'Visibility(mi)', 'Wind Speed(mph) ', 'Precipitation(in)' ]) self.tableView = QTableView(self.widget) #self.tableView.setStyleSheet("QTableView{ background-color: rgb(45, 45, 45); }") # cell color self.tableView.horizontalHeader().setStretchLastSection(True) self.tableView.setEditTriggers(QAbstractItemView.NoEditTriggers) self.tableView.setModel(self.model) layout3.addWidget(self.tableView, 1, 0, 1, 4) # ==================# GROUP 4 WIDGETS (MAP) #==================# # Qwebview maps #create map instance and update later when the train button is clicked self.map = 0 self.create_map_instance() self.layout4.addWidget(self.map) # ==================# SHOW EVERYTHING #==================# self.show() # make map ready message self.app.processEvents() msg = QMessageBox() msg.setText("<p align = 'center'>" "<i><br>(US Accidents Dataset)</i><br>" "<h2>DATA ANALYSIS &<br>" "DATA VISUALIZATION TOOL w/<br> " "GEOGRAPHICAL MAPPING</h2>" "<br>" "<i>Introduction to Data Mining</i><br>" "<i>(DATS 6103)</i><br>" "<i>Professor: Amir Jafari, PhD</i></h6><br>" "" "</p>") msg.exec_() self.app.processEvents() time.sleep(4) self.status_display_map.setText("NO DATA POINTS") self.status_display_map.setStyleSheet( "QLabel { color: red ; font-weight: bold}") self.status_display_map.update() ######################################### FUNCTIONS ##################################################### #=============== VIEW STATISTICAL SUMMRY FUNCTION ====================# # @QtCore.pyqtSlot() #def on_Button1_clicked(self): #self.loadCsv(self.fileName) #print("Statistical summary button clicked") def loadCsv(self, fileName): while (self.model.rowCount() > 0): self.model.removeRow(0) try: with open(fileName, "r") as fileInput: for row in csv.reader(fileInput): self.items = [QtGui.QStandardItem(field) for field in row] self.model.appendRow(self.items) self.model.setVerticalHeaderLabels([ 'Severity', 'Latitude', 'Longitude', 'Distance(mi)', 'Number', 'Temperature', 'Wind Chill(F)', 'Humidity%', 'Pressure(in)', 'Visibility(mi)', 'Wind Speed(mph) ', 'Precipitation(in)' ]) except: self.model.setVerticalHeaderLabels([ 'Severity', 'Latitude', 'Longitude', 'Distance(mi)', 'Number', 'Temperature', 'Wind Chill(F)', 'Humidity%', 'Pressure(in)', 'Visibility(mi)', 'Wind Speed(mph) ', 'Precipitation(in)' ]) print("No Database") # =============== VIEW TEST SET FUNCTION ====================# def loadCsv_test_set(self, fileName): while (self.model_test_set.rowCount() > 0): self.model_test_set.removeRow(0) try: with open(fileName, "r") as fileInput: csvreader = csv.reader(fileInput) for row in csvreader: print("row is", row) self.items_test_set = [ QtGui.QStandardItem(field) for field in row ] self.model_test_set.appendRow(self.items_test_set) except: print("No Database on test set") #====================== GET ATTRIBUTES FUNCTION=========================# def get_predict_attributes(self): print( "Data in predict button is: ", #self.severity_display.text(), #self.line_edit_latitude.text(), #self.line_edit_longitude.text(), #self.line_edit_number.text(), self.line_edit_distance.text(), self.line_edit_temperature.text(), self.line_edit_wind_chill.text(), self.line_edit_humidity.text(), self.line_edit_pressure.text(), self.line_edit_visibility.text(), self.line_edit_wind_speed.text(), self.line_edit_precipitation.text()) return [ # self.severity_display.text(), #self.line_edit_latitude.text(), #self.line_edit_longitude.text(), #self.line_edit_number.text(), self.line_edit_distance.text(), self.line_edit_temperature.text(), self.line_edit_wind_chill.text(), self.line_edit_humidity.text(), self.line_edit_pressure.text(), self.line_edit_visibility.text(), self.line_edit_wind_speed.text(), self.line_edit_precipitation.text() ] def get_train_attributes(self): print( "Data in train button is: ", self.SpinBox1.text(), self.SpinBox2.text(), self.model_algorithm_combo.currentText(), #self.accuracy_display.text() ) return ( self.SpinBox1.text(), self.SpinBox2.text(), self.model_algorithm_combo.currentText(), # self.accuracy_display.text() ) #########-------------------------------------- INITIALIZE MAP FUNCTION -------------------------------------- ######### def create_map_instance(self): # create Qwebview Map instance try: import map_view except: print("import exception") # create initial dummy data for map # initial self.points is 0 file_path = os.path.abspath( os.path.join(os.path.dirname(__file__), "map.html")) self.map = map_view.map_webview(file_path, self.points) # pass datapoints #########-------------------------------------- TRAIN FUNCTION -------------------------------------- ######### def on_Button_train_clicked(self): print("Button train clicked") attributes_train = self.get_train_attributes() submit_status = True k_value = 0 if attributes_train[2] == "KNN": # pop up screen try: import pop_up_entry except: print("import error") pop_up1 = pop_up_entry.pop_up_entry(self.app, attributes_train[2]) k_value, submit_status = pop_up1.get_status() print(k_value) print(submit_status) if submit_status == True: #make stus bar busy self.update_status_bar() self.app.processEvents() # train model try: import train_model except: print("import exception") model1 = train_model.train(attributes_train, k_value, self.app, self.pca_model) self.points = model1.get_map_data_points() self.current_model = model1.get_model() #update screen self.accuracy_display.display( model1.get_model_accuracy()) # set the lcd accuract digit self.update_screen_widgets(attributes_train) #make model ready message self.app.processEvents() msg = QMessageBox() msg.setText('Model Ready') msg.exec_() try: import map_load_time except: print("import exception") numsamples = int(attributes_train[0]) loadtime1 = map_load_time.map_load_time() timetoloadmap = loadtime1.calculate_load_time(numsamples) # make map ready after a few seconds depending on sample size self.app.processEvents() time.sleep(int(timetoloadmap)) self.status_display_map.setText("READY") self.status_display_map.setStyleSheet( "QLabel { color: green ; font-weight: bold}") self.status_display_map.update() # make map ready message self.app.processEvents() msg = QMessageBox() msg.setText('Geo Map Ready') msg.exec_() def update_status_bar(self): self.status_display_model.setText("WAIT...") self.status_display_model.setStyleSheet( "QLabel { color: yellow ; font-weight: bold}") self.status_display_model.update() self.status_display_map.setText("WAIT...") self.status_display_map.setStyleSheet( "QLabel { color: yellow ; font-weight: bold}") self.status_display_map.update() def update_screen_widgets(self, attributes_train): # update image in screen correlation self.pixmap0 = QPixmap("correlation_matrix.png") self.imageView0.setPixmap(self.pixmap0) self.imageView0.update() # update image in screen histograms self.pixmap = QPixmap("histograms.png") self.imageView.setPixmap(self.pixmap) self.imageView.update() self.scroll.update() # update image in screen scatter self.pixmap2 = QPixmap("scatterplots.png") self.imageView2.setPixmap(self.pixmap2) self.imageView2.update() self.scroll2.update() # update image in screen graphs #self.pixmap3 = QPixmap("temp_hist.png") #self.imageView3.setPixmap(self.pixmap3) #self.imageView3.update() # update map self.layout4.removeWidget(self.map) self.create_map_instance() # self.map.update() self.layout4.addWidget(self.map) # update summary table filename = os.path.expanduser( os.path.abspath( os.path.join(os.path.dirname(__file__), "statistic_summary.csv"))) self.items = [] self.fileName = filename self.loadCsv(self.fileName) # update test set table filename_test_set = os.path.expanduser( os.path.abspath( os.path.join(os.path.dirname(__file__), "X_test.csv"))) self.items_test_set = [] self.fileName_test_set = filename_test_set self.loadCsv_test_set(self.fileName_test_set) #update lcd train (accuracy #self.accuracy_display.setStyleSheet("QLCDNumber { color: black ; background-color: #1f77b4 }") self.accuracy_display.update() # update lcd predict (severity) self.severity_display.display(0) self.severity_display.update() #status bar update self.status_display_model.setText(attributes_train[2].upper()) self.status_display_model.setStyleSheet( "QLabel { color: green ; font-weight: bold}") self.status_display_model.update() self.status_display_map.setText("WAIT...") self.status_display_map.setStyleSheet( "QLabel { color: yellow ; font-weight: bold}") self.status_display_map.update() #########-------------------------------------- PREDICT FUNCTION -------------------------------------- ######### def on_Button_predict_clicked(self): model_name = self.get_train_attributes() print("Button predict clicked") attributes = self.get_predict_attributes() print("button predcit", attributes) print("button predcit", self.current_model) #make sure there is a model and there are no missing values if self.current_model == 0: print("missing model", self.current_model) msg = QMessageBox() msg.setText('No Model Available') msg.exec_() elif "" in attributes: print("missing values", attributes) msg = QMessageBox() msg.setText('Missing Values') msg.exec_() else: ###predict the inputs with the current model try: import predict except: print("import exception") predict1 = predict.predict(attributes, self.current_model, self.status_display_model.text(), model_name[2], self.pca_model) predict_result1 = predict1.predict_inputs() self.severity_display.display(predict_result1) #print("no model or missing inputs") #########-------------------------------------- VIEW GEOMAP LOAD TIME PNG FUNCTION -------------------------------------- ######### def on_Button_geomap_clicked(self): display_img = QDialog() label_image = QLabel() pixmap1 = QPixmap('map_load_time.png') label_image.setPixmap(pixmap1) layout_show = QGridLayout() display_img.setLayout(layout_show) layout_show.addWidget(label_image, 0, 0) display_img.exec_() #msg = QMessageBox() #msg.setIconPixmap(QPixmap("map_load_time.png")) #msg.exec_() print("geobuttonmap clicked") #########-------------------------------------- VIEW ML MODEL PNG FUNCTION -------------------------------------- ######### def on_Button_model_clicked(self): display_img = QDialog() label_image = QLabel() if self.current_model == 0: msg = QMessageBox() msg.setText('No Model Available') msg.exec_() #pixmap1 = QPixmap('analysis.png') else: pixmap1 = QPixmap('model_image.png') label_image.setPixmap(pixmap1) layout_show = QGridLayout() display_img.setLayout(layout_show) # scroller #scroll = QtWidgets.QScrollArea() #scroll.setWidget(label_image) #layout_show.addWidget(scroll, 0, 0) layout_show.addWidget(label_image, 0, 0) display_img.exec_() print("model button clicked")
class UI(object): def setupUI(self, Widget): layout0 = QHBoxLayout() self.addImageBtn = QPushButton('Dodaj zdjęcie', self) layout0.addWidget(self.addImageBtn) layoutA = QHBoxLayout() self.originalBtn = QPushButton('Oryginał', self) self.negativeBtn = QPushButton('Negatyw', self) self.grayedOutBtn = QPushButton('Szarość', self) self.histEqualizeBtn = QPushButton('Normalizacja histogramu', self) self.binarizationBtn = QPushButton('Binaryzacja', self) self.blurBtn = QPushButton('Rozmycie', self) self.skelBtn = QPushButton('Szkieletyzacja', self) self.erosionBtn = QPushButton('Erozja', self) layoutA.addWidget(self.originalBtn) layoutA.addWidget(self.negativeBtn) layoutA.addWidget(self.grayedOutBtn) layoutA.addWidget(self.histEqualizeBtn) layoutA.addWidget(self.binarizationBtn) layoutA.addWidget(self.blurBtn) layoutA.addWidget(self.skelBtn) layoutA.addWidget(self.erosionBtn) layoutB = QHBoxLayout() self.gaussBtn = QPushButton('Rozmycie Gaussa', self) self.medianBtn = QPushButton('Filtr medianowy', self) self.rgb2grayBtn = QPushButton('Przestrzeń kolorów RGB->GRAY', self) self.rgb2hsvBtn = QPushButton('Przestrzeń kolorów RGB->HSV', self) self.cannyBtn = QPushButton('Detekcja krawędzi', self) self.otsuBtn = QPushButton('Segmentacja Otsu', self) layoutB.addWidget(self.gaussBtn) layoutB.addWidget(self.medianBtn) layoutB.addWidget(self.rgb2grayBtn) layoutB.addWidget(self.rgb2hsvBtn) layoutB.addWidget(self.cannyBtn) layoutB.addWidget(self.otsuBtn) layoutC = QHBoxLayout() self.segHistBtn = QPushButton( 'Segmentacja - wyznaczanie progów na podstawie histogramu', self) self.watershedBtn = QPushButton('Segmentacja - watershed algorithm', self) self.brighterBtn = QPushButton('Jasność', self) layoutC.addWidget(self.segHistBtn) layoutC.addWidget(self.watershedBtn) layoutC.addWidget(self.brighterBtn) self.chkGroup = QButtonGroup() for i, v in enumerate(('Jaśniej', 'Ciemniej')): self.chk = QCheckBox(v) self.chkGroup.addButton(self.chk, i) layoutC.addWidget(self.chk) self.chkGroup.buttons()[0].setChecked(True) layoutD = QHBoxLayout() self.rotatingBtn = QPushButton('Rotacja', self) self.slider = QSlider(Qt.Horizontal) self.slider.setMaximum(360) self.slider.setMinimum(0) self.lcd = QLCDNumber(3) self.lcd.setMaximumHeight(25) self.lcd.setMinimumWidth(100) self.lcd.setSegmentStyle(QLCDNumber.Flat) self.scalingBtn = QPushButton('Skalowanie', self) self.slider1 = QSlider(Qt.Horizontal) self.slider1.setMinimum(50) self.slider1.setMaximum(200) self.lcd1 = QLCDNumber(4) self.lcd1.setMaximumHeight(25) self.lcd1.setMinimumWidth(100) self.lcd1.setSegmentStyle(QLCDNumber.Flat) self.slider2 = QSlider(Qt.Horizontal) self.slider2.setMinimum(1) self.slider2.setMaximum(10) self.lcd2 = QLCDNumber(4) self.lcd2.setMaximumHeight(25) self.lcd2.setMinimumWidth(100) self.lcd2.setSegmentStyle(QLCDNumber.Flat) layoutD.addWidget(self.rotatingBtn) layoutD.addWidget(self.slider) layoutD.addWidget(self.lcd) layoutD.addWidget(self.scalingBtn) layoutD.addWidget(self.slider1) layoutD.addWidget(self.lcd1) layoutD.addWidget(self.slider2) layoutD.addWidget(self.lcd2) layoutE = QHBoxLayout() self.image = QLabel(self) img = cv.imread('lenna.bmp') img = cv.cvtColor(img, cv.COLOR_BGR2RGB) qimg = QImage(img.data, img.shape[1], img.shape[0], QImage.Format_RGB888) pixmap = QPixmap.fromImage(qimg) self.image.setPixmap(pixmap) layoutE.addWidget(self.image) layoutE.setAlignment(Qt.AlignCenter) mainLayout = QVBoxLayout() mainLayout.addLayout(layoutA) mainLayout.addLayout(layoutB) mainLayout.addLayout(layoutC) mainLayout.addLayout(layoutD) mainLayout.addLayout(layoutE) mainLayout.addLayout(layout0) self.setLayout(mainLayout) # przypisanie układu do okna głównego self.setWindowTitle('Przetwarzanie obrazów') self.resize(1366, 768)
class OmniRigQTControls: def __init__(self, operatingAsClient, sendCommandFunction=None): self.operatingAsClient = operatingAsClient self.omnirigObject = None self.omniRigInfo = {} self.sendCommandFunction = sendCommandFunction self.blackColorPalette = QPalette() self.blackColorPalette.setColor(QPalette.WindowText, QColor("black")) self.redColorPalette = QPalette() self.redColorPalette.setColor(QPalette.WindowText, QColor("red")) self.boldFont = QFont() self.boldFont.setBold(True) self.regularFont = QFont() self.regularFont.setBold(False) self.labelRigName = QLabel("Rig is not responding") self.rigSelectGroupBox = QGroupBox("Rig select:") self.radioBtnTRX1 = QRadioButton("Rig 1") self.radioBtnTRX1.setChecked(True) self.radioBtnTRX1.toggled.connect(self.refreshRigInformation) self.radioBtnTRX2 = QRadioButton("Rig 2") self.radioBtnTRX2.toggled.connect(self.refreshRigInformation) hboxRigSelect = QHBoxLayout() hboxRigSelect.addWidget(self.radioBtnTRX1) hboxRigSelect.addWidget(self.radioBtnTRX2) hboxRigSelect.addWidget(self.labelRigName) hboxRigSelect.addStretch() self.rigSelectGroupBox.setLayout(hboxRigSelect) self.rigSelectGroupBox.setMaximumWidth(360) self.lcdTrxFrequency = QLCDNumber(10) self.lcdTrxFrequency.display('00.000.00') self.lcdTrxFrequency.setPalette(self.blackColorPalette) self.lcdTrxFrequency.setMinimumHeight(50) self.lcdTrxFrequency.setMaximumHeight(50) self.lcdTrxFrequency.setMaximumWidth(275) self.lcdTrxFrequency.setMinimumWidth(275) self.labelRigModeLSB = QLabel('LSB') self.labelRigModeLSB.setFont(self.boldFont) self.labelRigModeLSB.setEnabled(False) self.labelRigModeUSB = QLabel('USB') self.labelRigModeUSB.setFont(self.boldFont) self.labelRigModeUSB.setEnabled(False) vboxMiddlePanel = QVBoxLayout() vboxMiddlePanel.addWidget(self.labelRigModeLSB) vboxMiddlePanel.addWidget(self.labelRigModeUSB) hboxMiddlePanel = QHBoxLayout() hboxMiddlePanel.addLayout(vboxMiddlePanel) hboxMiddlePanel.addStretch() self.btnBack500Hz = QPushButton("<--") self.btnBack500Hz.setFixedWidth(50) self.btnForward500Hz = QPushButton("-->") self.btnForward500Hz.setFixedWidth(50) self.btnForward500Hz.clicked.connect(self.btnOmniRigPlus500HzClick) self.btnOmniRigUSB = QPushButton("USB") self.btnOmniRigUSB.clicked.connect(self.btnOmniUSBClick) self.btnOmniRigUSB.setFixedWidth(50) self.btnOmniRigLSB = QPushButton("LSB") self.btnOmniRigLSB.clicked.connect(self.btnOmniLSBClick) self.btnOmniRigLSB.setFixedWidth(50) hboxRigCATControl = QHBoxLayout() hboxRigCATControl.addWidget(self.btnBack500Hz) hboxRigCATControl.addWidget(self.btnForward500Hz) hboxRigCATControl.addStretch() hboxRigCATControl.addWidget(self.btnOmniRigLSB) hboxRigCATControl.addWidget(self.btnOmniRigUSB) hboxRigCATControl.addStretch(1) hboxMainLayout = QHBoxLayout() hboxMainLayout.addWidget(self.lcdTrxFrequency) hboxMainLayout.addLayout(hboxMiddlePanel) self.vboxMainLayout = QVBoxLayout() self.vboxMainLayout.addWidget(self.rigSelectGroupBox) self.vboxMainLayout.addLayout(hboxMainLayout) if self.operatingAsClient is True: self.vboxMainLayout.addLayout(hboxRigCATControl) def setOmnirigObject(self, omnirigObject): self.omnirigObject = omnirigObject def btnOmniRigPlus500HzClick(self): try: self.omnirigObject = win32.Dispatch("OmniRig.OmniRigX") except: pass if self.omnirigObject is not None and self.operatingAsClient is False: if self.radioBtnTRX1.isChecked(): self.omnirigObject.Rig1.SetSimplexMode(str(self.omnirigObject.Rig1.Freq+500)) else: self.omnirigObject.Rig2.SetSimplexMode(str(self.omnirigObject.Rig1.Freq+500)) if self.operatingAsClient is True and self.sendCommandFunction is not None: self.sendCommandFunction('+500=1') def btnOmniLSBClick(self): try: self.omnirigObject = win32.Dispatch("OmniRig.OmniRigX") except: pass if self.omnirigObject is not None and self.operatingAsClient is False: if self.radioBtnTRX1.isChecked(): self.omnirigObject.Rig1.Mode = '67108864' else: self.omnirigObject.Rig2.Mode = '67108864' if self.operatingAsClient is True and self.sendCommandFunction is not None: self.sendCommandFunction('setLSB=1') def btnOmniUSBClick(self): try: self.omnirigObject = win32.Dispatch("OmniRig.OmniRigX") except: pass if self.omnirigObject is not None and self.operatingAsClient is False: if self.radioBtnTRX1.isChecked(): self.omnirigObject.Rig1.Mode = '33554432' else: self.omnirigObject.Rig2.Mode = '33554432' if self.operatingAsClient is True and self.sendCommandFunction is not None: self.sendCommandFunction('setUSB=1') def setDisplayFreq(self, txtFreq): self.lcdTrxFrequency.display(txtFreq) def setOmniRigErrorText(self, msgText): self.labelRigName.setText(msgText) self.labelRigName.setPalette(self.redColorPalette) def setRigStatus(self, rigType): self.labelRigName.setText(rigType) self.labelRigName.setPalette(self.blackColorPalette) def getRigsInformation(self): return self.omniRigInfo def disableControls(self): self.radioBtnTRX1.setEnabled(False) self.radioBtnTRX2.setEnabled(False) def refreshRigInformation(self): rignum = '2' if self.radioBtnTRX1.isChecked(): rignum = '1' if len(self.omniRigInfo) > 1: self.radioBtnTRX1.setText(self.omniRigInfo['1'].getRigType()) self.radioBtnTRX2.setText(self.omniRigInfo['2'].getRigType()) freqTxt = self.omniRigInfo[rignum].getRigFreq() self.setDisplayFreq(self.addDotsToFreq(freqTxt)) self.setRigStatus(self.omniRigInfo[rignum].getRigStatus()) if freqTxt == 0: self.labelRigModeUSB.setEnabled(False) self.labelRigModeLSB.setEnabled(False) else: if self.omniRigInfo[rignum].getRigMode() == 'LSB': self.labelRigModeUSB.setEnabled(False) self.labelRigModeLSB.setEnabled(True) else: self.labelRigModeUSB.setEnabled(True) self.labelRigModeLSB.setEnabled(False) def setRigInformation(self, omniRigInfo): self.omniRigInfo = omniRigInfo self.refreshRigInformation() def addDotsToFreq(self, freqvalue): freqTxt = str(freqvalue) if len(freqTxt) < 6: freqTxt = '00000000' firstPart = freqTxt[:-6] if len(freqTxt) == 8: mainPart = freqTxt[:7] middlePart = mainPart[2:5] lastPart = mainPart[5:] else: mainPart = freqTxt[:6] middlePart = mainPart[1:4] lastPart = mainPart[4:] return firstPart+"."+middlePart+"."+lastPart def getGUI(self): return self.vboxMainLayout
class Alram(QMainWindow): def __init__(self): super().__init__() self.hour = '00' self.minute = '00' #set and load music try: self.song = path.abspath(path.join(path.dirname(__name__),"carol_of_the_bells-alarm.mp3")) self.isMusicPlay = False mixer.init() mixer.music.load(self.song) mixer.music.set_volume(0.7) self.setWindowTitle('Alram') self.setGeometry(300,200,350,200) self.buildGui() self.getCurrentTime() self.show() except Exception as e: pass def buildGui(self): self.digiClock = QFrame(self) self.digiClock_ly = QVBoxLayout() self.digiClock.setLayout(self.digiClock_ly) self.setALrmBox = QFrame(self.digiClock) self.setALrmBox_ly = QHBoxLayout() self.setALrmBox.setLayout(self.setALrmBox_ly) self.LCDDisplay = QLCDNumber(self.digiClock) self.LCDDisplay.setMaximumHeight(200) self.LCDDisplay.setMaximumWidth(350) self.LCDDisplay.setDigitCount(8) self.LCDDisplay.setSegmentStyle(QLCDNumber.Flat) #self.LCDDisplay.setBaseSize(150,100) self.stopAlrm = QPushButton("Stop Alram") self.stopAlrm.clicked.connect(self.stopAlarmTone) self.HHour = QComboBox(self.setALrmBox) self.MMunit = QComboBox(self.setALrmBox) self.HHour.addItem('Hour') self.MMunit.addItem('Minute') for s in range(0,24): s = '0'+str(s) if s in [0,1,2,3,4,5,6,7,8,9] else str(s) self.HHour.addItem(s) for m in range(0,61): m = '0'+str(m) if m in [0,1,2,3,4,5,6,7,8,9] else str(m) self.MMunit.addItem(m) self.setAlrm = QPushButton("Set Alarm",self.setALrmBox) self.setAlrm.clicked.connect(self.setAlrmBtnClick) self.setALrmBox_ly.addWidget(self.HHour) self.setALrmBox_ly.addWidget(self.MMunit) self.setALrmBox_ly.addWidget(self.setAlrm) self.digiClock_ly.addWidget(self.LCDDisplay) self.digiClock_ly.addWidget(self.setALrmBox) self.setCentralWidget(self.digiClock) def getCurrentTime(self): CTime = dt.datetime.now() h = '0'+str(CTime.hour) if CTime.hour in [0,1,2,3,4,5,6,7,8,9] else str(CTime.hour) m = '0'+str(CTime.minute) if CTime.minute in [0,1,2,3,4,5,6,7,8,9] else str(CTime.minute) s = '0'+str(CTime.second) if CTime.second in [0,1,2,3,4,5,6,7,8,9] else str(CTime.second) c = h + ':' + m + ':' + s if h == self.getHour() and m == self.getMinute(): if self.isMusicPlay == False: mixer.music.play() self.isMusicPlay = True if self.stopAlrm.parentWidget() == None: self.stopAlrm.setParent(self.digiClock) else: self.stopAlrm.show() self.digiClock_ly.addWidget(self.stopAlrm) self.LCDDisplay.display(c) self.task1 = threading.Timer(1,self.getCurrentTime) self.task1.start() def setAlrmBtnClick(self): if self.isMusicPlay == True: self.stopAlrm.hide() self.isMusicPlay = False self.hour = str(self.HHour.currentText()) self.minute = str(self.MMunit.currentText()) QMessageBox.information(self,'Alerm Set Info',"Alerm set Successfully...!",QMessageBox.Ok) #print(f'Hour:{self.hour} Minute:{self.minute}') def getHour(self): return self.hour def getMinute(self): return self.minute def stopAlarmTone(self): mixer.music.stop() def closeEvent(self,evnt): self.task1.cancel() return super().closeEvent(evnt)