def _print_hits(self, pattern_index, hit_list, humanisation, pattern_length=1): #X represents the data points to be plotted on the grid. #It also stores velocity data about each hit. X = np.zeros((4, 16 * pattern_length)) #iterator j = 0 for i in hit_list: if i[0] == 'k': X[3][int(i[1]) - 1] = 1. / (self.volume - abs(humanisation[j]) * 300) if i[0] == 's': X[2][int(i[1]) - 1] = 1. / (self.volume - abs(humanisation[j]) * 300) if i[0] == 'g': X[2][int(i[1]) - 1] = 1. / (40 - abs(humanisation[j]) * 300) if i[0] == 'h': X[1][int(i[1]) - 1] = 1. / (self.volume - abs(humanisation[j]) * 300) if i[0] == 'p': X[0][int(i[1]) - 1] = 1. / (self.volume - abs(humanisation[j]) * 300) j += 1 #Normalise zero values for heat mapping purposes. normal_value = np.amax(X) + 0.005 X[X == 0] = normal_value #Plot figure. fig, ax = plt.subplots(figsize=(10, 10)) ax.imshow(X, cmap=plt.get_cmap('gist_gray')) y_labels = ['Percussion', 'Hat', 'Snare', 'Kick'] ax.set_xticks(list(range(0, 16 * pattern_length))) ax.set_yticks(list(range(0, 4))) ax.set_yticklabels(y_labels) ax.set_xticklabels(list(range(1, 16 * pattern_length + 1))) minor_xlocator = AutoMinorLocator(2) minor_ylocator = FixedLocator( [x + 0.5 for x in range(0, 16 * pattern_length)]) ax.xaxis.set_minor_locator(minor_xlocator) ax.yaxis.set_minor_locator(minor_ylocator) ax.grid(which='minor', color='0.4', linestyle='dashed') fig.patch.set_facecolor("None") canvas = FigureCanvas(fig) canvas.setStyleSheet("background-color:transparent;") canvas.draw() return canvas
def _create_plot(self): dpi = plt.rcParams['figure.dpi'] figsize = (self._plot_width / dpi, self._plot_height / dpi) figure = plt.figure(frameon=False, figsize=figsize) axes = figure.add_subplot(111) canvas = FigureCanvas(figure) canvas.setFocusPolicy(QtCore.Qt.ClickFocus) canvas.setFixedSize(self._plot_width, self._plot_height) canvas.setStyleSheet("background: transparent") return axes, canvas
class Ui_MainWindow(object): #======================= center Main ============================ def center(self, Form): frameGm = Form.frameGeometry() screen = QtGui.QApplication.desktop().screenNumber( QtGui.QApplication.desktop().cursor().pos()) centerPoint = QtGui.QApplication.desktop().screenGeometry( screen).center() frameGm.moveCenter(centerPoint) Form.move(frameGm.topLeft()) #======================= center Main ============================ def Action1(self): from resetpassword import Ui_ResetPassword self.window = QtGui.QMainWindow() self.ui = Ui_ResetPassword() self.ui.setupUi(self.window) self.window.show() def Action2(self): from Login import Ui_Form self.window = QtGui.QWidget() self.ui = Ui_Form() self.ui.setupUi(self.window) self.window.show() self.MainWindow.close() #============ Select from table ============== def cell_was_clicked(self, row, column): global ID ID = self.tableWidget.item(row, column) #============ Select from table ============== #===============GoToNewWindow=================== def OpenCreate(self): from admincreate import Ui_CreateWindow self.window = QtGui.QMainWindow() self.ui = Ui_CreateWindow() self.ui.setupUi(self.window) self.window.show() self.MainWindow.close() #===============GoToNewWindow=================== #===============GoToEditWindow=================== def OpenEdit(self): msgBox = QtGui.QMessageBox() if ID == "N": msgBox.setText("Please select one user to edit ") msgBox.setStandardButtons(QtGui.QMessageBox.Ok) msgBox.exec_() else: from admincreate import Ui_CreateWindow self.window = QtGui.QMainWindow() self.ui = Ui_CreateWindow() self.ui.setupUi(self.window) self.ui.pbsubmit.setText("Update User") m, con = DBCon.DBConnect() m.execute("SELECT * FROM User WHERE User_ID='%s' " % ID.text()) rez = m.fetchall() for data in rez: First_name = data[2] Father_name = data[3] Gfather_name = data[4] Family_name = data[5] Email = data[6] Phone_number = data[7] User_Role = data[8] Branch_ID = data[9] self.ui.lineEdit_13.setText(ID.text()) self.ui.lineEdit_13.setReadOnly(True) self.ui.lineEdit_9.setText(First_name) self.ui.lineEdit_11.setText(Father_name) self.ui.lineEdit_12.setText(Gfather_name) self.ui.lineEdit_10.setText(Family_name) self.ui.leemail.setText(Email) self.ui.lephone.setText(Phone_number) if User_Role == 'Station Officer': indexRole = 1 elif User_Role == 'Scene Officer': indexRole = 2 self.ui.comboBoxrole_3.setCurrentIndex(indexRole) self.ui.comboBoxbranch_3.setCurrentIndex(Branch_ID) self.window.show() self.MainWindow.close() #===============GoToEditWindow=================== #===============Delete User====================== def AlertM(self): global ID msgBox = QtGui.QMessageBox() if ID == "N": msgBox.setText("Please select one user to delete ") msgBox.setStandardButtons(QtGui.QMessageBox.Ok) msgBox.exec_() else: choice = QtGui.QMessageBox.question( None, 'Alert', "Are you sure you want to delete the user account?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) if choice == QtGui.QMessageBox.Yes: m, con = DBCon.DBConnect() m.execute("DELETE FROM User WHERE User_ID='%s' " % ID.text()) con.commit() con.close() msgBox.setText("User has been deleted successfully") msgBox.setStandardButtons(QtGui.QMessageBox.Ok) msgBox.exec_() else: pass #===============Delete User====================== def setupUi(self, MainWindow): self.MainWindow = MainWindow MainWindow.setObjectName(_fromUtf8("MainWindow")) MainWindow.resize(1340, 804) MainWindow.setStyleSheet( _fromUtf8("background-color: rgb(251, 251, 251)\n" "#QLineEdit { \n" "background-color: rgb(255, 255, 255)\n" "}")) self.centralwidget = QtGui.QWidget(MainWindow) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.gridLayout_3 = QtGui.QGridLayout(self.centralwidget) self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.logo = QtGui.QLabel(self.centralwidget) self.logo.setObjectName(_fromUtf8("logo")) self.horizontalLayout.addWidget(self.logo) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) ####################################**************************** self.pushbutton = QtGui.QPushButton('User Name ') self.pushbutton.setStyleSheet( _fromUtf8(" border: 0px; font-size=1000px;")) menu = QtGui.QMenu() menu.addAction('Reset Password', self.Action1) menu.addAction('Log out', self.Action2) self.pushbutton.setMenu(menu) ####################################**************************** self.horizontalLayout.addWidget(self.pushbutton) self.gridLayout_3.addLayout(self.horizontalLayout, 0, 0, 1, 2) self.menuframe = QtGui.QFrame(self.centralwidget) self.menuframe.setMinimumSize(QtCore.QSize(160, 0)) self.menuframe.setMaximumSize(QtCore.QSize(160, 16777215)) self.menuframe.setStyleSheet( _fromUtf8("border-color: rgb(22, 65, 74);")) self.menuframe.setFrameShape(QtGui.QFrame.StyledPanel) self.menuframe.setFrameShadow(QtGui.QFrame.Raised) self.menuframe.setObjectName(_fromUtf8("menuframe")) self.frame_dates = QtGui.QFrame(self.menuframe) self.frame_dates.setGeometry(QtCore.QRect(10, 70, 141, 261)) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.frame_dates.sizePolicy().hasHeightForWidth()) self.frame_dates.setSizePolicy(sizePolicy) self.frame_dates.setMinimumSize(QtCore.QSize(0, 261)) self.frame_dates.setStyleSheet( _fromUtf8("QLabel {\n" "font: 75 13pt \"Verdana\";\n" "}")) self.frame_dates.setFrameShape(QtGui.QFrame.NoFrame) self.frame_dates.setFrameShadow(QtGui.QFrame.Raised) self.frame_dates.setObjectName(_fromUtf8("frame_dates")) self.gridLayout_8 = QtGui.QGridLayout(self.frame_dates) self.gridLayout_8.setObjectName(_fromUtf8("gridLayout_8")) self.labeltimespan = QtGui.QLabel(self.frame_dates) font = QtGui.QFont() font.setFamily(_fromUtf8("Verdana")) font.setPointSize(13) font.setBold(False) font.setItalic(False) font.setWeight(9) self.labeltimespan.setFont(font) self.labeltimespan.setStyleSheet( _fromUtf8("color: rgb(22, 65, 74);\n" "")) self.labeltimespan.setObjectName(_fromUtf8("labeltimespan")) self.gridLayout_8.addWidget(self.labeltimespan, 5, 0, 1, 1) self.dateEditfrom = QtGui.QDateEdit(self.frame_dates) self.dateEditfrom.setObjectName(_fromUtf8("dateEditfrom")) self.gridLayout_8.addWidget(self.dateEditfrom, 2, 0, 1, 1) self.labelfromdate = QtGui.QLabel(self.frame_dates) font = QtGui.QFont() font.setFamily(_fromUtf8("Verdana")) font.setPointSize(13) font.setBold(False) font.setItalic(False) font.setWeight(9) self.labelfromdate.setFont(font) self.labelfromdate.setStyleSheet( _fromUtf8("color: rgb(22, 65, 74);\n" "")) self.labelfromdate.setObjectName(_fromUtf8("labelfromdate")) self.gridLayout_8.addWidget(self.labelfromdate, 1, 0, 1, 1) self.labeltodate = QtGui.QLabel(self.frame_dates) font = QtGui.QFont() font.setFamily(_fromUtf8("Verdana")) font.setPointSize(13) font.setBold(False) font.setItalic(False) font.setWeight(9) self.labeltodate.setFont(font) self.labeltodate.setStyleSheet(_fromUtf8("color: rgb(22, 65, 74);")) self.labeltodate.setObjectName(_fromUtf8("labeltodate")) self.gridLayout_8.addWidget(self.labeltodate, 3, 0, 1, 1) self.timeEdit = QtGui.QTimeEdit(self.frame_dates) self.timeEdit.setObjectName(_fromUtf8("timeEdit")) self.gridLayout_8.addWidget(self.timeEdit, 6, 0, 1, 1) self.dateEditto = QtGui.QDateEdit(self.frame_dates) self.dateEditto.setObjectName(_fromUtf8("dateEditto")) self.gridLayout_8.addWidget(self.dateEditto, 4, 0, 1, 1) self.labeldate = QtGui.QLabel(self.frame_dates) font = QtGui.QFont() font.setFamily(_fromUtf8("Verdana")) font.setPointSize(13) font.setBold(False) font.setItalic(False) font.setWeight(9) self.labeldate.setFont(font) self.labeldate.setStyleSheet(_fromUtf8("color: rgb(22, 65, 74);")) self.labeldate.setObjectName(_fromUtf8("labeldate")) self.gridLayout_8.addWidget(self.labeldate, 0, 0, 1, 1) self.filtermenutab = QtGui.QLabel(self.menuframe) self.filtermenutab.setGeometry(QtCore.QRect(0, 10, 91, 21)) self.filtermenutab.setStyleSheet( _fromUtf8("font: 75 11pt \"Verdana\";")) self.filtermenutab.setObjectName(_fromUtf8("filtermenutab")) self.burgermenu = QtGui.QLabel(self.menuframe) self.burgermenu.setGeometry(QtCore.QRect(130, 10, 21, 21)) self.burgermenu.setObjectName(_fromUtf8("burgermenu")) self.gridLayout_3.addWidget(self.menuframe, 1, 0, 1, 1) self.verticalLayout_4 = QtGui.QVBoxLayout() self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4")) self.line = QtGui.QFrame(self.centralwidget) self.line.setFrameShape(QtGui.QFrame.HLine) self.line.setFrameShadow(QtGui.QFrame.Sunken) self.line.setObjectName(_fromUtf8("line")) self.verticalLayout_4.addWidget(self.line) self.horizontalLayout_3 = QtGui.QHBoxLayout() self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3")) self.label_3 = QtGui.QLabel(self.centralwidget) self.label_3.setMaximumSize(QtCore.QSize(16777215, 20)) font = QtGui.QFont() font.setFamily(_fromUtf8("Helvetica")) font.setPointSize(12) self.label_3.setFont(font) self.label_3.setAlignment(QtCore.Qt.AlignCenter) self.label_3.setObjectName(_fromUtf8("label_3")) self.horizontalLayout_3.addWidget(self.label_3) self.verticalLayout_4.addLayout(self.horizontalLayout_3) self.gridLayout_3.addLayout(self.verticalLayout_4, 2, 0, 1, 2) self.tabWidget = QtGui.QTabWidget(self.centralwidget) self.tabWidget.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) self.tabWidget.setObjectName(_fromUtf8("tabWidget")) self.tab = QtGui.QWidget() self.tab.setObjectName(_fromUtf8("tab")) self.label_5 = QtGui.QLabel(self.tab) self.label_5.setGeometry(QtCore.QRect(540, 200, 141, 121)) self.label_5.setObjectName(_fromUtf8("label_5")) self.tabWidget.addTab(self.tab, _fromUtf8("")) self.tab_2 = QtGui.QWidget() self.tab_2.setObjectName(_fromUtf8("tab_2")) self.horizontalLayoutWidget = QtGui.QWidget(self.tab_2) self.horizontalLayoutWidget.setGeometry(QtCore.QRect(15, 0, 1121, 600)) self.horizontalLayoutWidget.setObjectName( _fromUtf8("horizontalLayoutWidget")) self.horizontalLayout_2 = QtGui.QHBoxLayout( self.horizontalLayoutWidget) self.horizontalLayout_2.setMargin(0) self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) #============================= self.figure = plt.figure() self.figure.patch.set_facecolor("None") self.canvas1 = FigureCanvas(self.figure) self.canvas1.setStyleSheet("background-color:transparent;") plot(self) #================================= self.horizontalLayout_2.addWidget(self.canvas1) #============================= self.figure = plt.figure() self.figure.patch.set_facecolor("None") self.canvas1 = FigureCanvas(self.figure) self.canvas1.setStyleSheet("background-color:transparent;") plot2(self) #================================= self.horizontalLayout_2.addWidget(self.canvas1) #============================= self.figure = plt.figure() self.figure.patch.set_facecolor("None") self.canvas1 = FigureCanvas(self.figure) self.canvas1.setStyleSheet("background-color:transparent;") plot1(self) #================================= self.horizontalLayout_2.addWidget(self.canvas1) self.tabWidget.addTab(self.tab_2, _fromUtf8("")) self.tab_3 = QtGui.QWidget() self.tab_3.setObjectName(_fromUtf8("tab_3")) self.gridLayout_2 = QtGui.QGridLayout(self.tab_3) self.gridLayout_2.setMargin(0) self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.DeleteUserB = QtGui.QPushButton(self.tab_3) self.DeleteUserB.setMaximumSize(QtCore.QSize(100, 16777215)) self.DeleteUserB.setStyleSheet( _fromUtf8("color: rgb(22, 65, 74);\n" "background-color: rgb(240, 240, 240);")) self.DeleteUserB.setObjectName(_fromUtf8("DeleteUserB")) self.gridLayout_2.addWidget(self.DeleteUserB, 2, 2, 1, 1) self.EditUserB = QtGui.QPushButton(self.tab_3) self.EditUserB.setMaximumSize(QtCore.QSize(100, 16777215)) self.EditUserB.setStyleSheet( _fromUtf8("color: rgb(22, 65, 74);\n" "background-color: rgb(240, 240, 240);\n" "")) self.EditUserB.setObjectName(_fromUtf8("EditUserB")) self.gridLayout_2.addWidget(self.EditUserB, 2, 1, 1, 1) self.tableWidget = QtGui.QTableWidget(self.tab_3) self.tableWidget.setStyleSheet( _fromUtf8("border-color: rgb(22, 65, 74);\n" "")) self.tableWidget.setObjectName(_fromUtf8("tableWidget")) #================= #selection to be by row instead of cell. self.tableWidget.setSelectionBehavior( QtGui.QAbstractItemView.SelectRows) # enable sorting self.tableWidget.setSortingEnabled(True) #================= self.tableWidget.setColumnCount(9) self.tableWidget.setRowCount(0) #=======ConnectToDatabase========== m, con = DBCon.DBConnect() q = "SELECT User_ID,First_name,Father_name,Gfather_name,Family_name,Email,Phone_number,User_Role,Branch_ID FROM User WHERE User_Role = 'Station Officer' or User_Role = 'Scene Officer'" m.execute(q) rez = m.fetchall() for row_num, row_data in enumerate(rez): self.tableWidget.insertRow(row_num) for col_num, data in enumerate(row_data): self.tableWidget.setItem(row_num, col_num, QtGui.QTableWidgetItem(str(data))) con.close() #=======ConnectToDatabase========== item = QtGui.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(0, item) item = QtGui.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(1, item) item = QtGui.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(2, item) item = QtGui.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(3, item) item = QtGui.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(4, item) item = QtGui.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(5, item) item = QtGui.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(6, item) item = QtGui.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(7, item) item = QtGui.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(8, item) self.gridLayout_2.addWidget(self.tableWidget, 1, 0, 1, 3) self.gridLayout = QtGui.QGridLayout() self.gridLayout.setObjectName(_fromUtf8("gridLayout")) spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem1, 0, 1, 1, 1) self.comboBox = QtGui.QComboBox(self.tab_3) self.comboBox.setObjectName(_fromUtf8("comboBox")) self.comboBox.addItem(_fromUtf8("")) self.comboBox.addItem(_fromUtf8("")) self.comboBox.addItem(_fromUtf8("")) self.gridLayout.addWidget(self.comboBox, 0, 2, 1, 1) self.SearchB = QtGui.QPushButton(self.tab_3) self.SearchB.setStyleSheet( _fromUtf8("color: rgb(22, 65, 74);\n" "background-color: rgb(240, 240, 240);\n" "\n" "")) self.SearchB.setObjectName(_fromUtf8("SearchB")) self.gridLayout.addWidget(self.SearchB, 0, 4, 1, 1) self.CreateUserB = QtGui.QPushButton(self.tab_3) self.CreateUserB.setStyleSheet( _fromUtf8("color: rgb(22, 65, 74);\n" "background-color: rgb(240, 240, 240);")) self.CreateUserB.setObjectName(_fromUtf8("CreateUserB")) #=======add a new user========== self.CreateUserB.clicked.connect(self.OpenCreate) #=======add a new user========== self.gridLayout.addWidget(self.CreateUserB, 0, 0, 1, 1) self.lesearchbox = QtGui.QLineEdit(self.tab_3) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.lesearchbox.sizePolicy().hasHeightForWidth()) self.lesearchbox.setSizePolicy(sizePolicy) self.lesearchbox.setObjectName(_fromUtf8("lesearchbox")) self.gridLayout.addWidget(self.lesearchbox, 0, 3, 1, 1, QtCore.Qt.AlignLeft) self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 3) self.tabWidget.addTab(self.tab_3, _fromUtf8("")) self.gridLayout_3.addWidget(self.tabWidget, 1, 1, 1, 1) self.tabWidget.raise_() self.menuframe.raise_() MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 1440, 22)) self.menubar.setObjectName(_fromUtf8("menubar")) MainWindow.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(MainWindow) self.statusbar.setObjectName(_fromUtf8("statusbar")) MainWindow.setStatusBar(self.statusbar) #=======Edit a new user========== self.EditUserB.clicked.connect(self.OpenEdit) #=======Edit a new user========== #=======Delete user========== self.DeleteUserB.clicked.connect(self.AlertM) #=======Delete user========== #============ Select from table ============== self.tableWidget.setSelectionBehavior( QtGui.QAbstractItemView.SelectRows) self.tableWidget.cellClicked.connect(self.cell_was_clicked) #============ Select from table ============== #=======Edit a new user========== self.CreateUserB.clicked.connect(self.OpenCreate) self.retranslateUi(MainWindow) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) MainWindow.setTabOrder(self.lesearchbox, self.CreateUserB) MainWindow.setTabOrder(self.CreateUserB, self.dateEditfrom) MainWindow.setTabOrder(self.dateEditfrom, self.dateEditto) MainWindow.setTabOrder(self.dateEditto, self.timeEdit) MainWindow.setTabOrder(self.timeEdit, self.EditUserB) MainWindow.setTabOrder(self.EditUserB, self.tableWidget) MainWindow.setTabOrder(self.tableWidget, self.DeleteUserB) MainWindow.setTabOrder(self.DeleteUserB, self.SearchB) MainWindow.setTabOrder(self.SearchB, self.comboBox) MainWindow.setTabOrder(self.comboBox, self.tabWidget) def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(_translate("MainWindow", "DARB", None)) #======================= center ============================ self.center(MainWindow) #======================= center ============================ self.logo.setText(_translate("MainWindow", "", None)) self.logo.setPixmap(QtGui.QPixmap("Img/logosmall-min.png")) self.labeltimespan.setText(_translate("MainWindow", "Time:", None)) self.labelfromdate.setText(_translate("MainWindow", "From:", None)) self.labeltodate.setText(_translate("MainWindow", "To:", None)) self.labeldate.setText(_translate("MainWindow", "Date:", None)) self.filtermenutab.setText( _translate("MainWindow", "Map\'s Filter", None)) self.burgermenu.setText(_translate("MainWindow", "", None)) self.burgermenu.setPixmap(QtGui.QPixmap("Img/menu.png")) self.label_3.setText(_translate("MainWindow", "Need Help?", None)) self.label_5.setText(_translate("MainWindow", "MAP", None)) # This Map tab self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Map", None)) self.tabWidget.setTabText( self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Statistics ", None)) self.DeleteUserB.setText(_translate("MainWindow", "Delete User", None)) self.EditUserB.setText(_translate("MainWindow", "Edit User", None)) item = self.tableWidget.horizontalHeaderItem(0) item.setText(_translate("MainWindow", "ID", None)) item = self.tableWidget.horizontalHeaderItem(1) item.setText(_translate("MainWindow", "First Name", None)) item = self.tableWidget.horizontalHeaderItem(2) item.setText(_translate("MainWindow", "New Column", None)) item = self.tableWidget.horizontalHeaderItem(3) item.setText(_translate("MainWindow", "Father Name", None)) item = self.tableWidget.horizontalHeaderItem(4) item.setText(_translate("MainWindow", "Family Name", None)) item = self.tableWidget.horizontalHeaderItem(5) item.setText(_translate("MainWindow", "Email", None)) item = self.tableWidget.horizontalHeaderItem(6) item.setText(_translate("MainWindow", "Phone", None)) item = self.tableWidget.horizontalHeaderItem(7) item.setText(_translate("MainWindow", "Role", None)) item = self.tableWidget.horizontalHeaderItem(8) item.setText(_translate("MainWindow", "Branch ID", None)) #======================================== # set column width to fit contents header = self.tableWidget.horizontalHeader() header.setResizeMode(0, QtGui.QHeaderView.Stretch) header.setResizeMode(1, QtGui.QHeaderView.ResizeToContents) header.setResizeMode(2, QtGui.QHeaderView.ResizeToContents) header.setResizeMode(3, QtGui.QHeaderView.ResizeToContents) header.setResizeMode(4, QtGui.QHeaderView.ResizeToContents) header.setResizeMode(5, QtGui.QHeaderView.Stretch) header.setResizeMode(6, QtGui.QHeaderView.ResizeToContents) header.setResizeMode(7, QtGui.QHeaderView.Stretch) header.setResizeMode(8, QtGui.QHeaderView.ResizeToContents) #======================================== self.comboBox.setItemText( 0, _translate("MainWindow", "-Filter by Role-", None)) self.comboBox.setItemText( 1, _translate("MainWindow", "Station Officer ", None)) self.comboBox.setItemText( 2, _translate("MainWindow", "Scene Officer ", None)) self.SearchB.setText(_translate("MainWindow", "Search", None)) self.CreateUserB.setText(_translate("MainWindow", "Create User ", None)) self.lesearchbox.setToolTip( _translate( "MainWindow", "<html><head/><body><p>Enter the name or ID of the officer you want to look up.</p></body></html>", None)) self.lesearchbox.setPlaceholderText( _translate("MainWindow", "Q search", None)) self.tabWidget.setTabText( self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Manage Users ", None))
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName(_fromUtf8("MainWindow")) MainWindow.resize(1500, 842) MainWindow.setAutoFillBackground(False) MainWindow.setStyleSheet(_fromUtf8("background-color: rgb(197, 197, 197)")) self.centralwidget = QtGui.QWidget(MainWindow) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.stackedWidget = QtGui.QStackedWidget(self.centralwidget) self.stackedWidget.setGeometry(QtCore.QRect(0, 0, 1500, 842)) self.stackedWidget.setObjectName(_fromUtf8("stackedWidget")) self.page1 = QtGui.QWidget() self.page1.setObjectName(_fromUtf8("page")) self.lineEdit1 = QtGui.QLineEdit(self.page1) self.lineEdit1.setGeometry(QtCore.QRect(810, 340, 129, 27)) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.lineEdit1.sizePolicy().hasHeightForWidth()) self.lineEdit1.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setFamily(_fromUtf8("URW Chancery L")) font.setPointSize(18) #self.lineEdit1.setStyleSheet(_fromUtf8("background-color: rgb(166, 166, 166)")) self.lineEdit1.setFont(font) self.lineEdit1.setAutoFillBackground(True) self.lineEdit1.setInputMethodHints(QtCore.Qt.ImhHiddenText|QtCore.Qt.ImhNoAutoUppercase) self.lineEdit1.setObjectName(_fromUtf8("lineEdit1")) self.label1 = QtGui.QLabel(self.page1) self.label1.setGeometry(QtCore.QRect(600, 320, 191, 71)) font = QtGui.QFont() font.setFamily(_fromUtf8("URW Palladio L")) font.setPointSize(24) self.label1.setFont(font) self.label1.setAutoFillBackground(False) self.label1.setObjectName(_fromUtf8("label1")) self.lineEdit1_2 = QtGui.QLineEdit(self.page1) self.lineEdit1_2.setGeometry(QtCore.QRect(810, 420, 129, 27)) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.lineEdit1_2.sizePolicy().hasHeightForWidth()) self.lineEdit1_2.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setFamily(_fromUtf8("URW Chancery L")) font.setPointSize(18) self.lineEdit1_2.setFont(font) #self.lineEdit1_2.setStyleSheet(_fromUtf8("background-color: rgb(166, 166, 166)")) self.lineEdit1_2.setInputMethodHints(QtCore.Qt.ImhHiddenText|QtCore.Qt.ImhNoAutoUppercase) self.lineEdit1_2.setObjectName(_fromUtf8("lineEdit1_2")) self.label1_2 = QtGui.QLabel(self.page1) self.label1_2.setGeometry(QtCore.QRect(600, 390, 191, 81)) font = QtGui.QFont() font.setFamily(_fromUtf8("URW Palladio L")) font.setPointSize(24) self.label1_2.setFont(font) self.label1_2.setAutoFillBackground(True) self.label1_2.setObjectName(_fromUtf8("label1_2")) self.label = QtGui.QLabel(self.page1) self.pixmap = QPixmap('small_400.jpg') self.label.setPixmap(self.pixmap) self.label.setGeometry(QtCore.QRect(560, 70, 400, 233)) self.label.setAutoFillBackground(True) self.label.setObjectName(_fromUtf8("label")) self.proceed = QtGui.QPushButton(self.page1) #self.proceed.setStyleSheet(_fromUtf8("background-color: rgb(166, 166, 166)")) self.proceed.setGeometry(QtCore.QRect(730, 490, 121, 31)) self.proceed.setObjectName(_fromUtf8("proceed")) self.proceed.clicked.connect(self.getInterface) self.stackedWidget.addWidget(self.page1) self.page2 = QtGui.QWidget() self.page2.setObjectName(_fromUtf8("page")) self.verticalLayout = QtGui.QVBoxLayout(self.page2) self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setSizeConstraint(QtGui.QLayout.SetMaximumSize) self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) self.horizontalLayout_2.setContentsMargins(-1, -1, -1, 10) self.verticalLayout_4 = QtGui.QVBoxLayout() self.verticalLayout_4.setContentsMargins(-1, 0, -1, -1) self.verticalLayout_4.setSpacing(30) self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4")) self.w = QtGui.QWidget() self.b = QtGui.QLabel(self.w) self.b.setText("Sniffing on interface:") self.c = QtGui.QLabel(self.w) self.c.setText("Timeout Limit") self.d = QtGui.QLabel(self.w) self.d.setText("ARP Table is Clean.\t\t") self.e = QtGui.QLabel(self.w) self.e.setText(".\t\t\t\t") self.listViewbtn = QtGui.QPushButton(self.w) self.listViewbtn.setGeometry(QtCore.QRect(40, 110, 75, 23)) self.listViewbtn.setObjectName(_fromUtf8("List_View")) self.listViewbtn.clicked.connect(self.switchView) self.c.move(2,30) self.d.move(2,60) self.e.move(2,80) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.w.sizePolicy().hasHeightForWidth()) self.verticalLayout_4.addWidget(self.w) self.fig5 = Figure(figsize=(1,1)) #self.fig5.patch.set_alpha(0.5) #self.ax = self.fig5.add_subplot(111) #self.ax.patch.set_facecolor('#ababab') #self.ax.patch.set_alpha(0.5) self.canvas5 = FigureCanvas(self.fig5) self.canvas5.setStyleSheet(_fromUtf8("background-color: transparent")) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.canvas5.sizePolicy().hasHeightForWidth()) clickable(self.canvas5).connect(lambda: self.swap(5)) self.canvas5.setSizePolicy(sizePolicy) self.verticalLayout_4.addWidget(self.canvas5) self.horizontalLayout_2.addLayout(self.verticalLayout_4) self.fig6 = Figure() self.canvas6 = FigureCanvas(self.fig6) self.canvas6.setStyleSheet("background-color: transparent;") sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.canvas6.sizePolicy().hasHeightForWidth()) self.canvas6.setSizePolicy(sizePolicy) #self.canvas6.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) #clickable(self.canvas6).connect(lambda: self.swap(5)) self.horizontalLayout_2.addWidget(self.canvas6) self.horizontalLayout_2.setStretch(0, 24) self.horizontalLayout_2.setStretch(1, 76) self.verticalLayout.addLayout(self.horizontalLayout_2) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setSpacing(25) self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.fig1 = Figure(figsize=(1,1)) self.canvas1 = FigureCanvas(self.fig1) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.canvas1.sizePolicy().hasHeightForWidth()) self.canvas1.setSizePolicy(sizePolicy) self.canvas1.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) clickable(self.canvas1).connect(lambda: self.swap(1)) self.horizontalLayout.addWidget(self.canvas1) self.fig2 = Figure(figsize=(1,1)) self.canvas2 = FigureCanvas(self.fig2) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.canvas2.sizePolicy().hasHeightForWidth()) self.canvas2.setSizePolicy(sizePolicy) self.canvas2.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) clickable(self.canvas2).connect(lambda: self.swap(2)) self.horizontalLayout.mouseReleaseEvent = print("hey") self.horizontalLayout.addWidget(self.canvas2) self.fig3 = Figure(figsize=(1,1)) self.canvas3 = FigureCanvas(self.fig3) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.canvas3.sizePolicy().hasHeightForWidth()) self.canvas3.setSizePolicy(sizePolicy) self.canvas3.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) clickable(self.canvas3).connect(lambda: self.swap(3)) self.horizontalLayout.addWidget(self.canvas3) self.fig4 = Figure(figsize=(1,1)) self.canvas4 = FigureCanvas(self.fig4) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.canvas4.sizePolicy().hasHeightForWidth()) self.canvas4.setSizePolicy(sizePolicy) self.canvas4.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) clickable(self.canvas4).connect(lambda: self.swap(4)) self.horizontalLayout.addWidget(self.canvas4) self.verticalLayout.addLayout(self.horizontalLayout) self.verticalLayout.setStretch(0, 10) self.verticalLayout.setStretch(1, 4) self.stackedWidget.addWidget(self.page2) #List view: self.page3 = QtGui.QWidget() self.page3.setObjectName(_fromUtf8("page")) self.verticalLayout_List = QtGui.QVBoxLayout(self.page3) self.verticalLayout_List.setObjectName(_fromUtf8("verticalLayout_List")) self.tableWidget = QtGui.QTableWidget(self.centralwidget) self.tableWidget.setObjectName(_fromUtf8("tableWidget")) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.tableWidget.sizePolicy().hasHeightForWidth()) self.tableWidget.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) self.tableWidget.setSizePolicy(sizePolicy) self.tableWidget.setColumnCount(6) self.tableWidget.setAlternatingRowColors(True) self.tableWidget.cellClicked.connect(lambda:self.updateListView(self.tableWidget.currentRow())) print(dir(self.tableWidget.scroll)) self.tableWidget.setColumnWidth(0,220) self.tableWidget.setColumnWidth(1,220) self.tableWidget.setColumnWidth(2,220) self.tableWidget.setColumnWidth(3,220) self.tableWidget.setColumnWidth(4,220) self.tableWidget.setColumnWidth(5,220) self.tableWidget.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) self.tableWidget.scrollToBottom() self.tableWidget.setRowCount(0) self.verticalLayout_List.addWidget(self.tableWidget) self.info = QtGui.QWidget() self.b1 = QtGui.QLabel(self.info) self.b1.setText("Sniffing on interface:") self.b2 = QtGui.QLabel(self.info) self.b2.setText("Sniffing on interface:") self.b2.move(0,30) self.b3 = QtGui.QLabel(self.info) self.b3.setText("Sniffing on interface:") self.b3.move(0,60) self.verticalLayout_List.addWidget(self.info) self.verticalLayout_List.setStretch(0, 4) self.verticalLayout_List.setStretch(1, 2) self.stackedWidget.addWidget(self.page3) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 25)) self.menubar.setObjectName(_fromUtf8("menubar")) self.view = QtGui.QMenu(self.menubar) self.view.setObjectName(_fromUtf8("view")) MainWindow.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(MainWindow) self.statusbar.setObjectName(_fromUtf8("statusbar")) MainWindow.setStatusBar(self.statusbar) self.change_View = QtGui.QAction(MainWindow) self.change_View.setObjectName(_fromUtf8("change_view")) self.change_View.triggered.connect(self.switchView) self.view.addAction(self.change_View) self.menubar.addAction(self.view.menuAction()) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def mousePressEvent(self, QMouseEvent): print (QMouseEvent.pos()) def mouseReleaseEvent(self, QMouseEvent): cursor =QtGui.QCursor() print (cursor.pos()) def swap(self,a): global cur cur = a def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) self.listViewbtn.setText(_translate("List_View", "List View", None)) self.change_View.setText(_translate("change_view", "List View", None)) self.view.setTitle(_translate("MainWindow", "View", None)) self.label1.setText(_translate("MainWindow", "Interface :", None)) self.label1_2.setText(_translate("MainWindow", "Timeout :", None)) self.proceed.setText(_translate("MainWindow", "Proceed", None)) def getInterface(self): global sniffingInterface, sniffingTimeOut, t2 sniffingInterface = self.lineEdit1.text() sniffingTimeOut = int(self.lineEdit1_2.text()) print(sniffingInterface,sniffingTimeOut) self.stackedWidget.setCurrentIndex(1) self.plot() def switchView(self): global isListView if(isListView): self.change_View.setText("List View") self.stackedWidget.setCurrentIndex(1) isListView = False else: self.change_View.setText("Graphic View") self.stackedWidget.setCurrentIndex(2) isListView = True def plot(self): global cur global a global color global autoScroll global lenOfArray global x_base global arp_attack global mac_add ax1 = self.fig1.add_subplot(111) ax1.clear() ax1.set_ylim([0,60]) ax1.fill_between(x_base,0,a[0,-100:],linewidth=1.4,color=color[0]) self.canvas1.draw() ax2 = self.fig2.add_subplot(111) ax2.clear() ax2.set_ylim([0,60]) ax2.fill_between(x_base,0,a[1,-100:],linewidth=1.4,color=color[1]) self.canvas2.draw() ax3 = self.fig3.add_subplot(111) ax3.clear() ax3.set_ylim([0,60]) ax3.fill_between(x_base,0,a[2,-100:],linewidth=1.4,color=color[2]) self.canvas3.draw() ax4 = self.fig4.add_subplot(111) ax4.clear() ax4.set_ylim([0,60]) ax4.fill_between(x_base,0,a[3,-100:],linewidth=1.4,color=color[3]) self.canvas4.draw() ax5 = self.fig5.add_subplot(111) ax5.clear() ax5.set_ylim([0,60]) ax5.fill_between(x_base,0,a[4,-100:],linewidth=1.4,color=color[4]) self.canvas5.draw() ax6 = self.fig6.add_subplot(111) ax6.clear() ax6.set_ylim([0,60]) ax6.fill_between(x_base,0,a[cur-1,-100:],linewidth=3.0,color=color[cur-1]) self.canvas6.draw() if(lenOfArray<a.size): self.tableWidget.insertRow(self.tableWidget.rowCount()) for i in range(6): self.x = self.tableWidget.rowCount() self.tableWidget.setRowCount(self.x) self.tableWidget.setItem(self.x-1,i,QtGui.QTableWidgetItem(str(a[i,int(lenOfArray/6)]))) if(autoScroll): self.tableWidget.scrollToBottom() lenOfArray += 6 QtCore.QTimer.singleShot(1, self.plot) if(arp_attack): self.d.setText("ARP spoof detected") self.d.setStyleSheet(_fromUtf8("background-color: rgb(255, 10, 10)")) self.e.setText("Suspicious mac address: "+mac_add) self.e.setStyleSheet(_fromUtf8("background-color: rgb(255, 10, 10)")) def updateListView(self, x): global autoScroll autoScroll = False self.b1.setText("data"+str(a[0,x+100])) self.b2.setText("data"+str(a[1,x+100])) self.b3.setText("data"+str(a[2,x+100])) print(a[:,x+2])
class MainWindow(QtGui.QMainWindow): """Balloon tracker main window""" updatetrigger = QtCore.pyqtSignal() def __init__(self): """Initialise main window""" super(MainWindow, self).__init__() # Create data handler (creates also data collector) self.datahandler = aprs_daemon.DataHandlerThread(self) self.setWindowTitle("Balloon Tracker") self.setObjectName("mainwindow") self.resize(800, 600) centralwidget = QtGui.QWidget(self) self.updatetrigger.connect(self._update_all) sizepol = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizepol.setHorizontalStretch(0) sizepol.setVerticalStretch(0) sizepol.setHeightForWidth(centralwidget.sizePolicy().hasHeightForWidth()) centralwidget.setSizePolicy(sizepol) centralwidget.setObjectName("centralwidget") mainlayout = QtGui.QHBoxLayout(centralwidget) mainlayout.setMargin(0) mainlayout.setObjectName("mainlayout") gridlayout = QtGui.QGridLayout() gridlayout.setSizeConstraint(QtGui.QLayout.SetNoConstraint) gridlayout.setSpacing(0) gridlayout.setObjectName("gridlayout") # compass area self.compass = None self.distancelabel = None gridlayout.addWidget(self.create_compass(centralwidget), 1, 1, 1, 1) # data area self.items = [] gridlayout.addWidget(self.create_dataframe(centralwidget), 0, 1, 1, 1) # plot area self.canvas = None self.plots = [] self.axes = [] gridlayout.addWidget(self.create_plot(centralwidget), 1, 0, 1, 1) #map area self.webview = None self.create_map(centralwidget) gridlayout.addWidget(self.webview, 0, 0, 1, 1) mainlayout.addLayout(gridlayout) self.setCentralWidget(centralwidget) #menubar self.startstop = None self.followtoggle = None self.followtarget = 0 self.setMenuBar(self.create_menubar()) #statusbar self.statusbar = QtGui.QStatusBar(self) self.statusbar.setObjectName("statusbar") self.setStatusBar(self.statusbar) self.runstatus = QtGui.QLabel("Ready") self.statusbar.addPermanentWidget(self.runstatus) self.followstatus = QtGui.QLabel("Balloon") self.statusbar.addPermanentWidget(self.followstatus) self.gpsstatus = QtGui.QLabel("GPS") self.gpsstatus.setStyleSheet('color: gray') self.statusbar.addPermanentWidget(self.gpsstatus) self.statusmessage = QtGui.QLabel("") self.statusbar.addPermanentWidget(self.statusmessage, 1) #toolbar #self.toolBar = QtGui.QToolBar(self) #self.toolBar.setObjectName("toolBar") #self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) def create_compass(self, parent): """Create compass area""" compassframe = QtGui.QFrame(parent) compassframe.setAutoFillBackground(False) #compassframe.setStyleSheet("background-color: rgb(255, 255, 255);") # compassframe.setFrameShape(QtGui.QFrame.StyledPanel) # compassframe.setFrameShadow(QtGui.QFrame.Raised) compassframe.setObjectName("compassframe") compasslayout = QtGui.QVBoxLayout(compassframe) compasslayout.setMargin(0) compasslayout.setObjectName("compasslayout") palette = QtGui.QPalette() palette.setColor(QtGui.QPalette.Base, QtCore.Qt.darkBlue) palette.setColor(QtGui.QPalette.Foreground, QtGui.QColor(QtCore.Qt.darkBlue).dark(120)) palette.setColor(QtGui.QPalette.Text, QtCore.Qt.white) self.compass = Qwt.QwtCompass() self.compass.setLineWidth(4) self.compass.setScaleTicks(1, 1, 3) self.compass.setScale(36, 5, 0) self.compass.setReadOnly(True) self.compass.setNeedle(Qwt.QwtCompassMagnetNeedle( Qwt.QwtCompassMagnetNeedle.ThinStyle)) self.compass.setValue(0.0) compasslayout.addWidget(self.compass) self.distancelabel = QtGui.QLabel("NA") self.distancelabel.setAlignment(QtCore.Qt.AlignCenter) compasslayout.addWidget(self.distancelabel) return compassframe def create_dataframe(self, parent): """Create data frame""" dataframe = QtGui.QFrame(parent) sizepol = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Expanding) sizepol.setHorizontalStretch(0) sizepol.setVerticalStretch(0) sizepol.setHeightForWidth(dataframe.sizePolicy().hasHeightForWidth()) dataframe.setSizePolicy(sizepol) dataframe.setMinimumSize(QtCore.QSize(200, 0)) # dataframe.setFrameShape(QtGui.QFrame.StyledPanel) # dataframe.setFrameShadow(QtGui.QFrame.Raised) dataframe.setObjectName("dataframe") datalayout = QtGui.QVBoxLayout(dataframe) datalayout.setMargin(0) datalayout.setObjectName("datalayout") treewidget = QtGui.QTreeWidget() treewidget.setColumnCount(2) treewidget.setIndentation(0) treewidget.setAlternatingRowColors(1) treewidget.header().hide() for row in range(len(DATA_LABELS)/2): self.items.append(QtGui.QTreeWidgetItem(treewidget, [DATA_LABELS[1+2*row], ''])) treewidget.resizeColumnToContents(0) treewidget.resizeColumnToContents(1) treewidget.insertTopLevelItems(0, self.items) datalayout.addWidget(treewidget) return dataframe def create_menubar(self): """Create menu bar""" menubar = QtGui.QMenuBar(self) menubar.setObjectName("menubar") menu_file = QtGui.QMenu("&File", menubar) menu_file.setObjectName("menuFile") menu_operation = QtGui.QMenu("&Operation", menubar) menu_operation.setObjectName("menuOperation") menu_help = QtGui.QMenu("&Help", menubar) menu_help.setObjectName("menuHelp") menu_settings = QtGui.QMenu("&Settings", menubar) menu_settings.setObjectName("menuSettings") #actions new_session = QtGui.QAction("&New Session", self) new_session.setIconVisibleInMenu(False) new_session.setObjectName("new_session") open_session = QtGui.QAction("&Open Session", self) open_session.setObjectName("open_session") save_session = QtGui.QAction("&Save Session", self) save_session.setObjectName("save_session") exit_program = QtGui.QAction("&Exit", self) exit_program.setObjectName("exit") self.startstop = QtGui.QAction("&Start", self) self.startstop.setObjectName("startstop") self.followtoggle = QtGui.QAction("&Follow GPS", self) self.followtoggle.setObjectName("followtoggle") general_settings = QtGui.QAction("&General", self) general_settings.setObjectName("general_settings") balloon_settings = QtGui.QAction("&Balloon", self) balloon_settings.setObjectName("balloon_settings") help_window = QtGui.QAction("&Help", self) help_window.setObjectName("help") about = QtGui.QAction("&About", self) about.setObjectName("about") #menu content menu_file.addAction(new_session) menu_file.addAction(open_session) menu_file.addAction(save_session) menu_file.addSeparator() menu_file.addAction(exit_program) menu_operation.addAction(self.startstop) menu_operation.addAction(self.followtoggle) menu_help.addAction(help_window) menu_help.addSeparator() menu_help.addAction(about) menu_settings.addSeparator() menu_settings.addAction(general_settings) menu_settings.addAction(balloon_settings) menubar.addAction(menu_file.menuAction()) menubar.addAction(menu_operation.menuAction()) menubar.addAction(menu_settings.menuAction()) menubar.addAction(menu_help.menuAction()) #self.toolbar.addSeparator() #self.toolbar.addAction(self.startstop) QtCore.QObject.connect(new_session, QtCore.SIGNAL("triggered()"), self._new_session) QtCore.QObject.connect(open_session, QtCore.SIGNAL("triggered()"), self._open_session) QtCore.QObject.connect(save_session, QtCore.SIGNAL("triggered()"), self._save_session) QtCore.QObject.connect(exit_program, QtCore.SIGNAL("triggered()"), self._exit) QtCore.QObject.connect(self.startstop, QtCore.SIGNAL("triggered()"), self._startstop) QtCore.QObject.connect(self.followtoggle, QtCore.SIGNAL("triggered()"), self._followtoggle) QtCore.QObject.connect(general_settings, QtCore.SIGNAL("triggered()"), self._general_settings) QtCore.QObject.connect(balloon_settings, QtCore.SIGNAL("triggered()"), self._balloon_settings) QtCore.QObject.connect(help_window, QtCore.SIGNAL("triggered()"), self._help) QtCore.QObject.connect(about, QtCore.SIGNAL("triggered()"), self._about) QtCore.QMetaObject.connectSlotsByName(self) #self.toolBar.setWindowTitle("toolBar") return menubar def create_plot(self, parent): """Create plot area""" plotframe = QtGui.QFrame(parent) sizepol = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) sizepol.setHorizontalStretch(0) sizepol.setVerticalStretch(0) sizepol.setHeightForWidth(plotframe.sizePolicy().hasHeightForWidth()) plotframe.setSizePolicy(sizepol) plotframe.setMinimumSize(QtCore.QSize(0, 200)) plotframe.setMaximumSize(QtCore.QSize(1980, 200)) # plotframe.setFrameShape(QtGui.QFrame.StyledPanel) # plotframe.setFrameShadow(QtGui.QFrame.Raised) plotframe.setObjectName("plotframe") plotlayout = QtGui.QVBoxLayout(plotframe) plotlayout.setMargin(0) plotlayout.setObjectName("plotlayout") fig = plt.figure(dpi=100)#, frameon=False figsize=(20, 4), fig.patch.set_facecolor('white') rcParams['axes.color_cycle'] = ['k', 'b', 'g', 'r'] self.canvas = FigureCanvas(fig) self.axes.append(host_subplot(111, axes_class=aa.Axes)) self.axes[0].set_xlabel("Time") self.axes[0].set_ylabel(DATA_LABELS[9]) self.axes[0].set_aspect('auto', 'datalim') self.plots.append(self.axes[0].plot(aprs_daemon.LIVE_DATA['timestamps'], aprs_daemon.LIVE_DATA['altitudes'])[0]) fig.add_axes(self.axes[0]) self.axes[0].axis["left"].label.set_color(self.plots[0].get_color()) self.axes[0].tick_params(axis='y', color=self.plots[0].get_color()) for row in range(5, len(DATA_LABELS)/2): if row % 2 == 0: side = "left" offset = -1 else: side = "right" offset = 1 self.axes.append(self.axes[0].twinx()) self.axes[row-4].axis["right"].set_visible(False) new_fixed_axis = self.axes[row-4].get_grid_helper().new_fixed_axis self.axes[row-4].axis[side] = new_fixed_axis(loc=side, axes=self.axes[row-4], offset=(offset*(60*((row-5)%2+(row-5)/2)), 0)) self.axes[row-4].axis[side].label.set_visible(True) self.axes[row-4].axis[side].major_ticklabels.set_ha(side) self.axes[row-4].axis[side].set_label(DATA_LABELS[2*row+1]) self.plots.append(self.axes[row-4].plot(aprs_daemon.LIVE_DATA['timestamps'], aprs_daemon.LIVE_DATA[DATA_LABELS[2*row]])[0]) self.axes[row-4].axis[side].label.set_color(self.plots[row-4].get_color()) self.axes[row-4].set_aspect('auto', 'datalim') self.axes[row-4].tick_params(axis='y', colors=self.plots[row-4].get_color()) plt.subplots_adjust(bottom=0.3, left=0.20, right=0.8, top=0.85) fig.tight_layout() self.canvas.setParent(plotframe) self.canvas.setStyleSheet("background-color: rgb(255, 0, 255);") self.canvas.draw() plotlayout.addWidget(self.canvas) return plotframe def create_map(self, parent): """Create maps widget""" self.webview = QtWebKit.QWebView(parent) sizepol = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizepol.setHorizontalStretch(0) sizepol.setVerticalStretch(0) sizepol.setHeightForWidth(self.webview.sizePolicy().hasHeightForWidth()) self.webview.setPage(WebPage(self.webview)) self.webview.setSizePolicy(sizepol) self.webview.setAutoFillBackground(False) self.webview.setObjectName("webview") self.webview.load(QtCore.QUrl.fromLocalFile(os.path.dirname(os.path.realpath(__file__)) + "/gmap_openlayers.html")) self.webview.show() def _about(self): """Show information about program""" QtGui.QMessageBox.about(self, "About Balloon Tracker", "Balloon Tracker is a program.") def _help(self): """Show help for program""" QtGui.QMessageBox.about(self, "About Balloon Tracker", "Balloon Tracker is a program.") def _general_settings(self): """Show dialog for modifying general program settings""" dialog = SettingsDialog(self, "General settings", aprs_daemon.PARAMETERS, PARAMETER_SETTINGS) dialog.exec_() def _balloon_settings(self): """Show dialog for modifying balloon related settings""" dialog = SettingsDialog(self, "Balloon settings", aprs_daemon.BALLOON, BALLOON_SETTINGS) dialog.exec_() def _update_current_data(self): """Update current data and compass""" for row in range(len(DATA_LABELS)/2): if len(aprs_daemon.LIVE_DATA[DATA_LABELS[2*row]]) > 0: self.items[row].setText(1, str(round(aprs_daemon.LIVE_DATA[DATA_LABELS[2*row]][-1], 2))) lat0 = self.datahandler.loc['lat'] lon0 = self.datahandler.loc['lon'] lat1 = aprs_daemon.LIVE_DATA['lats'][-1] lon1 = aprs_daemon.LIVE_DATA['lons'][-1] self.compass.setValue(aprs_daemon.direction(lat0, lon0, lat1, lon1)) self.distancelabel.setText(''.join([str(int(aprs_daemon.distance(lat0, lon0, lat1, lon1))), ' m'])) def _update_dataplot(self): """Update data plot""" for row in range(4, len(DATA_LABELS)/2): self.plots[row-4].set_data(aprs_daemon.LIVE_DATA['timestamps'], aprs_daemon.LIVE_DATA[DATA_LABELS[2*row]]) self.axes[row-4].relim() self.axes[row-4].autoscale_view() self.canvas.draw() def _update_map(self): """Update map""" #FIXME follow current location or balloon? string = "" if self.followtarget == 0: string = "setCenter(%s, %s);" % \ (str(aprs_daemon.LIVE_DATA['lats'][-1]), str(aprs_daemon.LIVE_DATA['lons'][-1])) else: string = "setCenter(%s, %s);" % \ (str(self.datahandler.loc['lat']), str(self.datahandler.loc['lon'])) self.webview.page().mainFrame().evaluateJavaScript(string) string = "addPosition(%s, %s);" % \ (str(self.datahandler.loc['lat']), str(self.datahandler.loc['lon'])) self.webview.page().mainFrame().evaluateJavaScript(string) #update tracks string = "addNode(%s, %s);" % (str(aprs_daemon.LIVE_DATA['lats'][-1]), str(aprs_daemon.LIVE_DATA['lons'][-1])) self.webview.page().mainFrame().evaluateJavaScript(string) def _update_all(self): """Update all data in window""" self._update_current_data() self._update_dataplot() self._update_map() def update_data(self): """Trigger data update""" self.updatetrigger.emit() def _startstop(self): """Start collecting and processing data""" if self.datahandler.is_active(): self.startstop.setText("&Start") self.runstatus.setText("Ready") self.datahandler.exit() self.datahandler.join() else: self.startstop.setText("&Stop") self.runstatus.setText("Running") string = "cleanUpMarkers(0);\naddKML(\"%s\");\n\ setCenter(%s, %s);\naddPosition(%s, %s);\n\ addPosition(%s, %s);" % \ (aprs_daemon.PARAMETERS['kml_file'], str(aprs_daemon.BALLOON['lat0']), str(aprs_daemon.BALLOON['lon0']), str(aprs_daemon.BALLOON['lat0']), str(aprs_daemon.BALLOON['lon0']), str(self.datahandler.loc['lat']), str(self.datahandler.loc['lon'])) self.webview.page().mainFrame().evaluateJavaScript(string) if not self.datahandler.is_alive(): self.datahandler = aprs_daemon.DataHandlerThread(self) self.datahandler.start() def _followtoggle(self): """Toggle followed target""" if self.followtarget == 0: self.followtoggle.setText("&Follow Balloon") self.followstatus.setText("GPS") self.followtarget = 1 else: self.followtoggle.setText("&Follow GPS") self.followstatus.setText("Balloon") self.followtarget = 0 def closeEvent(self, event): """Handle window close event""" self._exit() def _exit(self): """Verify exiting program""" if QtGui.QMessageBox.question(self, 'Quit', "Do you really want to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) == QtGui.QMessageBox.Yes: if self.datahandler.is_active(): self.datahandler.exit() self.datahandler.join() QtCore.QCoreApplication.instance().quit() def _new_session(self): """Load default session settings""" self._open_session('default.ucl') def _open_session(self, fname=''): """Load stored session settings""" if fname == '': fname = QtGui.QFileDialog.getOpenFileName(self, 'Open session', '/home', 'Session files (*.ucl)') if fname: try: filep = open(fname, 'r') for line in filep: line = line.strip('\n') if line == "##GENERAL##": params = aprs_daemon.PARAMETERS param_conf = PARAMETER_SETTINGS elif line == "##BALLOON##": params = aprs_daemon.BALLOON param_conf = BALLOON_SETTINGS elif line != "": content = line.split('\t') if param_conf[content[0]][1] == "double": params[content[0]] = float(content[1]) elif param_conf[content[0]][1] == "int" or \ param_conf[content[0]][1] == "selectint": if param_conf[content[0]][1] == "int" and \ content[1] == '-1': params[content[0]] = None else: params[content[0]] = int(content[1]) elif param_conf[content[0]][1] == "bool": params[content[0]] = bool(int(content[1])) elif param_conf[content[0]][1] == "doublelist": values = content[1].split(",") if content[0] == "parachute_areas": values = np.pi * np.array([float(values[0]), float(values[1])])**2 params[content[0]] = values else: params[content[0]] = str(content[1]) filep.close() except IOError: print "IOError" except ValueError: print "ValueError" except TypeError: print "TypeError" def _save_session(self): """Save current session settings""" fname = QtGui.QFileDialog.getSaveFileName(self, "Save session", "/home", "Session files (*.ucl)") if fname: try: filep = open(fname, 'w') filep.write('##GENERAL##\n') for key in PARAMETER_SETTINGS.keys(): if PARAMETER_SETTINGS[key][1] == "bool": filep.write(''.join([key, '\t', str(int(aprs_daemon.PARAMETERS[key])), '\n'])) elif PARAMETER_SETTINGS[key][1] == "int" and \ aprs_daemon.PARAMETERS[key] is None: filep.write(''.join([key, '\t-1\n'])) else: filep.write(''.join([key, '\t', str(aprs_daemon.PARAMETERS[key]), '\n'])) filep.write('##BALLOON##\n') for key in BALLOON_SETTINGS.keys(): if BALLOON_SETTINGS[key][1] == "bool": filep.write(''.join([key, '\t', str(int(aprs_daemon.BALLOON[key])), '\n'])) elif BALLOON_SETTINGS[key][1] == "int" and \ aprs_daemon.BALLOON[key] is None: filep.write(''.join([key, '\t-1\n'])) elif BALLOON_SETTINGS[key][1] == "doublelist": values = aprs_daemon.BALLOON[key] if key == "parachute_areas": values = [np.sqrt(values[0]/np.pi), np.sqrt(values[1]/np.pi)] itervalues = iter(values) string = str(next(itervalues)) for value in itervalues: string += ","+str(value) filep.write(''.join([key, '\t', string, '\n'])) else: filep.write(''.join([key, '\t', str(aprs_daemon.BALLOON[key]), '\n'])) filep.close() except IOError: print "IO error"