def __init__(self, parent: PlotWidget, data: list, maxY: int): super().__init__() self.plot = pg.PlotDataItem() self.plot._name = 'graph' parent.showAxis('bottom', False) parent.setLimits( yMin=-3, #xMax = 60, yMax=maxY - 3, maxXRange=60, minYRange=maxY, maxYRange=maxY) highlight = parent.palette().color(QPalette.Highlight) self.plot.setPen(pg.mkPen(highlight, width=2)) self.plot.setBrush(highlight.darker()) self.plot.setFillLevel(-1.0) self.plot.setData(np.zeros(60)) # + int(data)) self.plot.append_data = self.append_data parent.getViewBox().setMouseEnabled(False) # prevent mouse wheel event parent.getViewBox().wheelEvent = lambda event: None parent.getViewBox().hoverEvent = self.mouse_hover parent.addItem(self.plot)
def __init__(self, atri_plot: PlotWidget, vent_plot: PlotWidget, data_size: int): print("Graphs handler init") # noinspection PyArgumentList atri_plot.setRange(xRange=[-1, data_size], yRange=[-0.5, 5.5], padding=0) atri_plot.setLimits(xMin=-1, xMax=data_size, maxXRange=data_size + 1, yMin=-0.5, yMax=5.5) atri_plot.setMouseEnabled(x=True, y=False) atri_plot.enableAutoRange(x=False, y=True) atri_plot.setAutoVisible(x=False, y=True) atri_plot.showGrid(x=True, y=True) atri_plot.hideButtons() atri_plot.setMenuEnabled(False) atri_plot.setLabel('left', "Amplitude", units='V', **{'color': '#FFF', 'font-size': '10pt'}) atri_plot.setLabel('bottom', "Time", units='s', **{'color': '#FFF', 'font-size': '10pt'}) atri_plot.getAxis('bottom').setHeight(30) # noinspection PyArgumentList vent_plot.setRange(xRange=[-1, data_size], yRange=[-0.5, 5.5], padding=0) vent_plot.setLimits(xMin=-1, xMax=data_size, maxXRange=data_size + 1, yMin=-0.5, yMax=5.5) vent_plot.setMouseEnabled(x=True, y=False) vent_plot.enableAutoRange(x=False, y=True) vent_plot.setAutoVisible(x=False, y=True) vent_plot.showGrid(x=True, y=True) vent_plot.hideButtons() vent_plot.setMenuEnabled(False) vent_plot.setLabel('left', "Amplitude", units='V', **{'color': '#FFF', 'font-size': '10pt'}) vent_plot.setLabel('bottom', "Time", units='s', **{'color': '#FFF', 'font-size': '10pt'}) vent_plot.getAxis('bottom').setHeight(30) # Initialize graphs to 0 self._atri_data = np.zeros(data_size) self._vent_data = np.zeros(data_size) # Create new sense plots for the atrial and ventricular graphs, in blue self._atri_plot = atri_plot.plot(pen=(0, 229, 255)) self._vent_plot = vent_plot.plot(pen=(0, 229, 255)) self._plot_data()
class Tiare(QtGui.QMainWindow): def __init__(self, *args): QtGui.QMainWindow.__init__(self, *args) self.statusBar().showMessage('Pret') self.th = 0 self.widget = QtGui.QWidget(self) exitAction = QtGui.QAction(QtGui.QIcon('exit.png'), '&Quitter', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip("Ferme l'application") exitAction.triggered.connect(self.close) openAction = QtGui.QAction(QtGui.QIcon('open.png'), '&Charger', self) openAction.setShortcut('Ctrl+L') openAction.setStatusTip("Charge un fichier wav") openAction.triggered.connect(self.load) self.saveAction = QtGui.QAction(QtGui.QIcon('save.png'), '&Exporter', self) self.saveAction.setShortcut('Ctrl+S') self.saveAction.setStatusTip("Exporter en CSV") self.saveAction.triggered.connect(self.export) self.saveAction.setEnabled(False) menubar = self.menuBar() fileMenu = menubar.addMenu('&Fichier') fileMenu.addAction(openAction) fileMenu.addAction(self.saveAction) fileMenu.addAction(exitAction) self.th_slider = QtGui.QSlider(QtCore.Qt.Horizontal, self) self.th_slider.setValue(self.th) self.th_slider.valueChanged[int].connect(self.change_threshold) self.min_len = QtGui.QSlider(QtCore.Qt.Horizontal, self) self.min_len.setValue(10) self.min_len.setMinimum(1) self.min_len.setMaximum(100) self.min_len.valueChanged[int].connect(self.change_min_len) self.min_len_sil = QtGui.QSlider(QtCore.Qt.Horizontal, self) self.min_len_sil.setValue(10) self.min_len_sil.setMinimum(1) self.min_len_sil.setMaximum(100) self.min_len_sil.valueChanged[int].connect(self.change_min_len) # Make sizer and embed stuff self.sizer = QtGui.QVBoxLayout(self.widget) self.fig_signal = PlotWidget(self.widget, background="w") self.fig_signal.setLimits(xMin=0, yMin=-1, yMax=1, minXRange=1, maxXRange=30, minYRange=2, maxYRange=2) self.fig_energy = PlotWidget(self.widget, background="w") self.fig_energy.setXLink(self.fig_signal) self.fig_segments = PlotWidget(self.widget, background="w") self.fig_segments.setXLink(self.fig_signal) self.fig_segments.hideAxis('bottom') self.fig_segments.hideAxis('left') self.fig_segments.setLimits(yMin=-1, yMax=1, minYRange=2, maxYRange=2) self.sizer.addWidget(self.fig_signal, 5) self.sizer.addWidget(self.fig_energy, 5) self.sizer.addWidget(self.fig_segments, 3) self.sizer.addWidget(QtGui.QLabel('Seuil de segmentation'), 0) self.sizer.addWidget(self.th_slider, 0) self.min_seg_label = QtGui.QLabel('Longeur minimal de segment (%.3f s)' % (float(self.min_len.value())/100)) self.sizer.addWidget(self.min_seg_label, 0) self.sizer.addWidget(self.min_len, 0) self.min_sil_label = QtGui.QLabel('Longeur minimal de silence (%.3f s)' % (float(self.min_len_sil.value())/100)) self.sizer.addWidget(self.min_sil_label, 0) self.sizer.addWidget(self.min_len_sil, 0) # Apply sizers self.setCentralWidget(self.widget) # Finish self.resize(560, 420) self.setWindowTitle('Tiare') self.energy_tl, self.energy = [], [] self.thline = None self.seg_up = None self.seg_down = None self.fig_energy_plot = None self.segments = [] self.samples = [] self.sr = 0 self.filepath = None self.widget.hide() self.show() def change_threshold(self, value): value = float(value)/100 if self.thline is not None : self.thline.setData([self.energy_tl[0], self.energy_tl[-1]], [value]*2) self.segments = map(lambda (x, y): (self.energy_tl[x],self.energy_tl[y]), cut(self.energy, value, self.min_len.value(), self.min_len_sil.value())) x = [v for start, stop in self.segments for v in [start, start, stop, stop]] y = [v for _ in self.segments for v in [-0.85, 0.85, 0.85, -0.85]] self.seg_up.setData(x, y) self.seg_down.setData([self.energy_tl[0], self.energy_tl[-1]], [-0.85, -0.85]) def change_min_len(self, value=0): self.min_seg_label.setText("Longeur minimale d'un segment (%.3f s)" % (float(self.min_len.value())/100)) self.min_sil_label.setText("Longeur minimale d'un silence (%.3f s)" % (float(self.min_len_sil.value())/100)) self.change_threshold(self.th_slider.value()) def compute_energy(self, value=None): self.energy_tl, self.energy = energy(self.samples, self.sr) if self.fig_energy_plot is not None: self.fig_energy_plot.setData(self.energy_tl, self.energy) self.change_min_len() def export(self): fpath = QtGui.QFileDialog.getSaveFileName(self, "Sauvegader en CSV", self.filepath+".csv") if fpath: with open(fpath[0], "w") as f: for start, stop in self.segments: f.write("Segments\t%s\t%s\n" % (datetime(day=1, month=1, year=1901, second=int(start), microsecond=int(10e5*(start % 1))) .strftime("%H:%M:%S.%f"), datetime(day=1, month=1, year=1901, second=int(stop), microsecond=int(10e5*(stop % 1))) .strftime("%H:%M:%S.%f"))) def load(self): fpath, _ = QtGui.QFileDialog.getOpenFileName(self, 'Choisir un fichier', '~/', filter="*.wav") self.widget.show() if fpath: self.filepath = fpath self.saveAction.setEnabled(True) self.samples, self.sr = load_sound(fpath) m = max(map(abs, self.samples)) timeline = [float(t)/self.sr for t in range(len(self.samples))] self.fig_signal.setLimits(xMax=timeline[-1]) self.compute_energy() self.fig_signal.getPlotItem().plot(timeline, map(lambda x: x/m, self.samples)) self.fig_energy_plot = self.fig_energy.getPlotItem().plot(self.energy_tl, self.energy) self.thline = self.fig_energy.getPlotItem().plot([self.energy_tl[0], self.energy_tl[-1]], [float(self.th_slider.value())/100]*2, pen=({'color': "k", "width": 1.5})) self.seg_up = self.fig_segments.getPlotItem().plot([self.energy_tl[0], self.energy_tl[-1]], [-0.85, -0.85]) self.seg_down = self.fig_segments.getPlotItem().plot([self.energy_tl[0], self.energy_tl[-1]], [-0.85, -0.85]) self.segments = FillBetweenItem(self.seg_up, self.seg_down, 0.7) self.fig_segments.addItem(self.segments)
class Ui_MainWindow(object): windowMoved = QtCore.pyqtSignal(QtCore.QPoint) def update2(self): data3 = self.data3 ptr3 = self.ptr3 data3[ptr3] = np.random.normal() ptr3 += 1 if ptr3 >= data3.shape[0]: tmp = data3 data3 = np.empty(data3.shape[0] * 2) data3[:tmp.shape[0]] = tmp self.pen1.setData(data3[:ptr3]) self.data3 = data3 if (ptr3 > 100): self.pen1.setPen(pg.mkPen('r', width=3)) self.pen1.setPos(-ptr3, 0) self.ptr3 = ptr3 def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(782, 511) MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded) self.centralwidget = QtWidgets.QWidget(MainWindow) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.centralwidget.sizePolicy().hasHeightForWidth()) self.centralwidget.setSizePolicy(sizePolicy) self.centralwidget.setObjectName("centralwidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout.setContentsMargins(5, 5, 5, 0) self.verticalLayout.setSpacing(0) self.verticalLayout.setObjectName("verticalLayout") self.bar = QtWidgets.QWidget(self.centralwidget) self.bar.setMaximumSize(QtCore.QSize(16777215, 25)) self.bar.setObjectName("bar") self.horizontalLayout = QtWidgets.QHBoxLayout(self.bar) self.horizontalLayout.setContentsMargins(-1, 5, -1, 5) self.horizontalLayout.setSpacing(9) self.horizontalLayout.setObjectName("horizontalLayout") self.exit = QtWidgets.QPushButton(self.bar) self.exit.setMaximumSize(QtCore.QSize(30, 20)) self.exit.setText("") self.exit.setObjectName("close") self.horizontalLayout.addWidget(self.exit) self.visit = QtWidgets.QPushButton(self.bar) self.visit.setMaximumSize(QtCore.QSize(30, 20)) self.visit.setText("") self.visit.setObjectName("visit") self.horizontalLayout.addWidget(self.visit) self.mini = QtWidgets.QPushButton(self.bar) self.mini.setMaximumSize(QtCore.QSize(30, 20)) self.mini.setFocusPolicy(QtCore.Qt.StrongFocus) self.mini.setText("") self.mini.setAutoDefault(False) self.mini.setDefault(False) self.mini.setFlat(False) self.mini.setObjectName("mini") self.horizontalLayout.addWidget(self.mini) spacerItem = QtWidgets.QSpacerItem(40, 15, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.verticalLayout.addWidget(self.bar) self.Menu = QtWidgets.QGridLayout() self.Menu.setObjectName("Menu") self.down = QtWidgets.QWidget(self.centralwidget) self.down.setMaximumSize(QtCore.QSize(16777215, 120)) self.down.setObjectName("down") self.gridLayout_down = QtWidgets.QGridLayout(self.down) self.gridLayout_down.setHorizontalSpacing(5) self.gridLayout_down.setObjectName("gridLayout_down") self.widget = PlotWidget(self.down) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.widget.sizePolicy().hasHeightForWidth()) self.widget.setSizePolicy(sizePolicy) self.widget.setMinimumSize(QtCore.QSize(0, 0)) self.widget.setMaximumSize(QtCore.QSize(300, 120)) self.widget.setLayoutDirection(QtCore.Qt.LeftToRight) self.widget.setObjectName("widget") self.gridLayout_down.addWidget(self.widget, 0, 0, 1, 1) self.CurrentScore = QtWidgets.QLabel(self.down) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.CurrentScore.sizePolicy().hasHeightForWidth()) self.CurrentScore.setSizePolicy(sizePolicy) self.CurrentScore.setMinimumSize(QtCore.QSize(20, 60)) self.CurrentScore.setMaximumSize(QtCore.QSize(300, 120)) font = QtGui.QFont() font.setFamily("JetBrains Mono") font.setPointSize(50) font.setBold(True) font.setWeight(75) self.CurrentScore.setFont(font) self.CurrentScore.setAlignment(QtCore.Qt.AlignCenter) self.CurrentScore.setObjectName("CurrentScore") self.gridLayout_down.addWidget(self.CurrentScore, 0, 1, 1, 1) self.TotalScore = QtWidgets.QLabel(self.down) self.TotalScore.setMinimumSize(QtCore.QSize(0, 0)) self.TotalScore.setMaximumSize(QtCore.QSize(250, 120)) font = QtGui.QFont() font.setPointSize(15) font.setKerning(True) self.TotalScore.setFont(font) self.TotalScore.setLayoutDirection(QtCore.Qt.RightToLeft) self.TotalScore.setAlignment(QtCore.Qt.AlignCenter) self.TotalScore.setObjectName("TotalScore") self.gridLayout_down.addWidget(self.TotalScore, 0, 2, 1, 1) self.Menu.addWidget(self.down, 4, 0, 1, 1) self.line = QtWidgets.QFrame(self.centralwidget) self.line.setFrameShadow(QtWidgets.QFrame.Plain) self.line.setLineWidth(10) self.line.setFrameShape(QtWidgets.QFrame.HLine) self.line.setObjectName("line") self.Menu.addWidget(self.line, 1, 0, 1, 1) self.up = QtWidgets.QWidget(self.centralwidget) self.up.setMinimumSize(QtCore.QSize(0, 0)) self.up.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.up.setObjectName("up") self.gridLayout_up = QtWidgets.QGridLayout(self.up) self.gridLayout_up.setHorizontalSpacing(5) self.gridLayout_up.setVerticalSpacing(7) self.gridLayout_up.setObjectName("gridLayout_up") self.Turn_bar = QtWidgets.QWidget(self.up) self.Turn_bar.setMaximumSize(QtCore.QSize(70, 200)) self.Turn_bar.setObjectName("Turn_bar") self.gridLayout_up.addWidget(self.Turn_bar, 0, 5, 1, 1) self.Turn_level = QtWidgets.QWidget(self.up) self.Turn_level.setMaximumSize(QtCore.QSize(80, 50)) self.Turn_level.setObjectName("Turn_level") self.gridLayout_up.addWidget(self.Turn_level, 1, 5, 1, 1) self.Acc_bar = QtWidgets.QWidget(self.up) self.Acc_bar.setMaximumSize(QtCore.QSize(70, 200)) self.Acc_bar.setObjectName("Acc_bar") self.gridLayout_up.addWidget(self.Acc_bar, 0, 0, 1, 1) spacer1 = QtWidgets.QSpacerItem(35, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) self.gridLayout_up.addItem(spacer1, 0, 2, 1, 1) self.feedback = QtWidgets.QToolButton(self.up) self.feedback.setMinimumSize(QtCore.QSize(50, 50)) self.feedback.setMaximumSize(QtCore.QSize(320, 320)) self.feedback.setFocusPolicy(QtCore.Qt.TabFocus) self.feedback.setObjectName("feedback") self.gridLayout_up.addWidget(self.feedback, 0, 3, 2, 1) self.Brake_bar = QtWidgets.QWidget(self.up) self.Brake_bar.setMaximumSize(QtCore.QSize(70, 200)) self.Brake_bar.setObjectName("Brake_bar") self.gridLayout_up.addWidget(self.Brake_bar, 0, 1, 1, 1) self.Swerve_level = QtWidgets.QWidget(self.up) self.Swerve_level.setMaximumSize(QtCore.QSize(80, 50)) self.Swerve_level.setObjectName("Swerve_level") self.gridLayout_up.addWidget(self.Swerve_level, 1, 6, 1, 1) self.Swerve_bar = QtWidgets.QWidget(self.up) self.Swerve_bar.setMaximumSize(QtCore.QSize(70, 200)) self.Swerve_bar.setObjectName("Swerve_bar") self.gridLayout_up.addWidget(self.Swerve_bar, 0, 6, 1, 1) self.Acc_level = QtWidgets.QWidget(self.up) self.Acc_level.setMaximumSize(QtCore.QSize(80, 50)) self.Acc_level.setObjectName("Acc_level") self.gridLayout_up.addWidget(self.Acc_level, 1, 0, 1, 1) self.Brake_level = QtWidgets.QWidget(self.up) self.Brake_level.setMaximumSize(QtCore.QSize(80, 50)) self.Brake_level.setObjectName("Brake_level") self.gridLayout_up.addWidget(self.Brake_level, 1, 1, 1, 1) spacer2 = QtWidgets.QSpacerItem(35, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) self.gridLayout_up.addItem(spacer2, 0, 4, 1, 1) self.Menu.addWidget(self.up, 0, 0, 1, 1) self.verticalLayout.addLayout(self.Menu) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 782, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.exit.setFixedSize(15, 15) self.visit.setFixedSize(15, 15) self.mini.setFixedSize(15, 15) self.exit.setStyleSheet( '''QPushButton{background:#F76677;border-radius:5px;}QPushButton:hover{background:red;}''' ) # self.visit.setStyleSheet('''QPushButton{background:#F7D674;border-radius:5px;}QPushButton:hover{background:yellow;}''') # self.mini.setStyleSheet('''QPushButton{background:#6DDF6D;border-radius:5px;}QPushButton:hover{background:green;}''') self.setWindowFlag(QtCore.Qt.FramelessWindowHint) # hide the boarder self.setWindowOpacity(0.98) self.setAttribute( QtCore.Qt.WA_TranslucentBackground) # set transparent window self.exit.clicked.connect(self.close) # close window self.mini.clicked.connect(self.showMinimized) # minimum window self.windowMoved.connect(self.move) # move window # draw graph of lines self.widget.setDownsampling(mode='peak') self.widget.setClipToView(True) self.widget.setXRange(0, 100) self.widget.setLimits(xMax=0) self.pen1 = self.widget.plot() self.pen1.setPen(pg.mkPen('y', width=3)) self.data3 = np.empty(10) self.ptr3 = 0 self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def mousePressEvent(self, event): if event.button() == QtCore.Qt.LeftButton: self.mPos = event.pos() event.accept() def mouseReleaseEvent(self, event): self.mPos = None event.accept() def mouseMoveEvent(self, event): if event.buttons() == QtCore.Qt.LeftButton and self.mPos: self.windowMoved.emit(self.mapToGlobal(event.pos() - self.mPos)) event.accept() # set current score and update def setCurrentScore(self, score): self.CurrentScore.setText(str(score)) # set Total score for trip def setTotalScore(self, score): self.TotalScore.setText(str(score) + ' points') def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.CurrentScore.setText(_translate("MainWindow", "86")) self.TotalScore.setText(_translate("MainWindow", "1240 points")) self.feedback.setText(_translate("MainWindow", "..."))
class Ui_MainWindow(object): def __init__(self): self._coin_gold0 = QtGui.QPixmap('icons/events/coin_gold0.png') self._coin_gold1 = QtGui.QPixmap('icons/events/coin_gold1.png') self._coin_gold2 = QtGui.QPixmap('icons/events/coin_gold2.png') self._gold_coin = QtGui.QPixmap('icons/events/coin_gold0.png') self._grey_coin = QtGui.QPixmap('icons/events/coin_gold1.png') self.grey_bar = QtGui.QPixmap('icons/bars/grey_wide.png') self.top_bar = QtGui.QPixmap('icons/bars/red_wide.png') self.medium_bar = QtGui.QPixmap('icons/bars/yellow_wide.png') self.bottom_bar = QtGui.QPixmap('icons/bars/green_wide.png') self.green_glow = pg.QtGui.QGraphicsPixmapItem( pg.QtGui.QPixmap('icons/glow/Orange-Glow.png')) self.orange_glow = pg.QtGui.QGraphicsPixmapItem( pg.QtGui.QPixmap('icons/glow/Orange-Glow.png')) self.yellow_glow = pg.QtGui.QGraphicsPixmapItem( pg.QtGui.QPixmap('icons/glow/Yellow-Glow.png')) self.acc_icon_png = QtGui.QPixmap('icons/bars/acc_icon_g.png') self.brake_icon_png = QtGui.QPixmap('icons/bars/brake_icon_g.png') self.turn_icon_png = QtGui.QPixmap('icons/bars/turn_icon_g.png') self.swerve_icon_png = QtGui.QPixmap('icons/bars/swerve_icon_g.png') pass windowMoved = QtCore.pyqtSignal(QtCore.QPoint) def update_flowing_score(self): data3 = self.data3 ptr3 = self.ptr3 data3[ptr3] = np.random.normal() ptr3 += 1 if ptr3 >= data3.shape[0]: tmp = data3 data3 = np.empty(data3.shape[0] * 2) data3[:tmp.shape[0]] = tmp self.pen_y.setData(data3[:ptr3]) self.data3 = data3 if (data3[ptr3] > 100): self.pen_y.setPen(pg.mkPen('r', width=3)) if (data3[ptr3] < 100): self.pen_y.setPen(pg.mkPen('y', width=3)) self.pen_y.setPos(-ptr3, 0) self.ptr3 = ptr3 def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(750, 500) MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded) self.centralwidget = QtWidgets.QWidget(MainWindow) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.centralwidget.sizePolicy().hasHeightForWidth()) self.centralwidget.setSizePolicy(sizePolicy) self.centralwidget.setObjectName("centralwidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout.setContentsMargins(5, 10, 5, 0) self.verticalLayout.setSpacing(0) self.verticalLayout.setObjectName("verticalLayout") self.bar = QtWidgets.QWidget(self.centralwidget) self.bar.setMaximumSize(QtCore.QSize(16777215, 30)) self.bar.setObjectName("bar") self.horizontalLayout = QtWidgets.QHBoxLayout(self.bar) self.horizontalLayout.setContentsMargins(-1, 5, 11, 5) self.horizontalLayout.setSpacing(9) self.horizontalLayout.setObjectName("horizontalLayout") self.exit = QtWidgets.QPushButton(self.bar) self.exit.setMaximumSize(QtCore.QSize(30, 20)) self.exit.setText("") self.exit.setObjectName("close") self.horizontalLayout.addWidget(self.exit) self.visit = QtWidgets.QPushButton(self.bar) self.visit.setMaximumSize(QtCore.QSize(30, 20)) self.visit.setText("") self.visit.setObjectName("visit") self.horizontalLayout.addWidget(self.visit) self.mini = QtWidgets.QPushButton(self.bar) self.mini.setMaximumSize(QtCore.QSize(30, 20)) self.mini.setFocusPolicy(QtCore.Qt.StrongFocus) self.mini.setText("") self.mini.setAutoDefault(False) self.mini.setDefault(False) self.mini.setFlat(False) self.mini.setObjectName("mini") self.horizontalLayout.addWidget(self.mini) spacerItem = QtWidgets.QSpacerItem(40, 15, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.next_page = QtWidgets.QPushButton(self.bar) self.next_page.setMaximumSize(QtCore.QSize(85, 30)) self.next_page.setObjectName("next_page") self.horizontalLayout.addWidget(self.next_page) self.verticalLayout.addWidget(self.bar) self.Menu = QtWidgets.QGridLayout() self.Menu.setObjectName("Menu") self.down = QtWidgets.QWidget(self.centralwidget) self.down.setMinimumSize(QtCore.QSize(0, 130)) self.down.setMaximumSize(QtCore.QSize(16777215, 130)) self.down.setObjectName("down") self.down.setStyleSheet( 'QWidget {background-color: #000000; color: yellow;}') self.gridLayout_down = QtWidgets.QGridLayout(self.down) self.gridLayout_down.setHorizontalSpacing(5) self.gridLayout_down.setObjectName("gridLayout_down") # pg.setConfigOption('background', '#17191A') self.flowing_scores = PlotWidget(self.down) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.flowing_scores.sizePolicy().hasHeightForWidth()) self.flowing_scores.setSizePolicy(sizePolicy) self.flowing_scores.setMinimumSize(QtCore.QSize(0, 0)) self.flowing_scores.setMaximumSize(QtCore.QSize(300, 120)) self.flowing_scores.setLayoutDirection(QtCore.Qt.LeftToRight) self.flowing_scores.setObjectName("widget") self.gridLayout_down.addWidget(self.flowing_scores, 0, 0, 1, 1) self.verticalLayout_4 = QtWidgets.QVBoxLayout() self.verticalLayout_4.setObjectName("verticalLayout_4") self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.total_coins_img = QtWidgets.QLabel(self.down) self.total_coins_img.setMinimumSize(QtCore.QSize(100, 0)) self.total_coins_img.setObjectName("total_coins_img") self.horizontalLayout_2.addWidget(self.total_coins_img) self.label_2 = QtWidgets.QLabel(self.down) self.label_2.setMinimumSize(QtCore.QSize(60, 40)) self.label_2.setText("") self.label_2.setObjectName("label_2") self.horizontalLayout_2.addWidget(self.label_2) self.total_coins_score = QtWidgets.QLabel(self.down) self.total_coins_score.setMinimumSize(QtCore.QSize(100, 0)) font = QtGui.QFont() font.setPointSize(20) font.setBold(True) font.setWeight(75) self.total_coins_score.setFont(font) self.total_coins_score.setObjectName("total_coins_score") self.horizontalLayout_2.addWidget(self.total_coins_score) self.verticalLayout_4.addLayout(self.horizontalLayout_2) self.total_coins = QtWidgets.QLabel(self.down) self.total_coins.setMinimumSize(QtCore.QSize(0, 10)) self.total_coins.setMaximumSize(QtCore.QSize(16777215, 10)) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.total_coins.setFont(font) self.total_coins.setAlignment(QtCore.Qt.AlignCenter) self.total_coins.setObjectName("total_coins") self.verticalLayout_4.addWidget(self.total_coins) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.trip_score_img = QtWidgets.QLabel(self.down) self.trip_score_img.setMinimumSize(QtCore.QSize(100, 0)) self.trip_score_img.setObjectName("trip_score_img") self.horizontalLayout_3.addWidget(self.trip_score_img) self.label_3 = QtWidgets.QLabel(self.down) self.label_3.setMinimumSize(QtCore.QSize(60, 0)) self.label_3.setText("") self.label_3.setObjectName("label_3") self.horizontalLayout_3.addWidget(self.label_3) self.trip_score_score = QtWidgets.QLabel(self.down) self.trip_score_score.setMinimumSize(QtCore.QSize(100, 0)) font = QtGui.QFont() font.setPointSize(20) self.trip_score_score.setFont(font) self.trip_score_score.setObjectName("trip_score_score") self.horizontalLayout_3.addWidget(self.trip_score_score) self.verticalLayout_4.addLayout(self.horizontalLayout_3) self.trip_score = QtWidgets.QLabel(self.down) self.trip_score.setMinimumSize(QtCore.QSize(0, 9)) self.trip_score.setMaximumSize(QtCore.QSize(250, 10)) font = QtGui.QFont() font.setFamily("Book Antiqua") font.setPointSize(10) font.setKerning(True) self.trip_score.setFont(font) self.trip_score.setLayoutDirection(QtCore.Qt.RightToLeft) self.trip_score.setAlignment(QtCore.Qt.AlignCenter) self.trip_score.setObjectName("trip_score") self.verticalLayout_4.addWidget(self.trip_score) self.gridLayout_down.addLayout(self.verticalLayout_4, 0, 4, 1, 1) self.verticalLayout_2 = QtWidgets.QVBoxLayout() self.verticalLayout_2.setObjectName("verticalLayout_2") self.verticalLayout_3 = QtWidgets.QVBoxLayout() self.verticalLayout_3.setSpacing(1) self.verticalLayout_3.setObjectName("verticalLayout_3") self.current_score = QtWidgets.QLabel(self.down) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.current_score.sizePolicy().hasHeightForWidth()) self.current_score.setSizePolicy(sizePolicy) self.current_score.setMinimumSize(QtCore.QSize(200, 60)) self.current_score.setMaximumSize(QtCore.QSize(250, 60)) font = QtGui.QFont() font.setFamily("Brush Script Std") font.setPointSize(50) font.setBold(False) font.setItalic(False) font.setWeight(50) self.current_score.setFont(font) self.current_score.setAlignment(QtCore.Qt.AlignCenter) self.current_score.setObjectName("CurrentScore") self.verticalLayout_3.addWidget(self.current_score) self.current_score_text = QtWidgets.QLabel(self.down) self.current_score_text.setMaximumSize(QtCore.QSize(250, 16777215)) self.current_score_text.setMinimumSize(QtCore.QSize(250, 40)) font = QtGui.QFont() font.setBold(True) font.setWeight(75) font.setPointSize(15) self.current_score_text.setFont(font) self.current_score_text.setAlignment(QtCore.Qt.AlignCenter) self.current_score_text.setObjectName("label") self.verticalLayout_3.addWidget(self.current_score_text) self.verticalLayout_2.addLayout(self.verticalLayout_3) self.gridLayout_down.addLayout(self.verticalLayout_2, 0, 1, 1, 1) # font = QtGui.QFont() # font.setPointSize(15) # font.setKerning(True) # font.setBold(True) # font.setFamily("Brush Script Std") self.Menu.addWidget(self.down, 4, 0, 1, 1) self.line = QtWidgets.QFrame(self.centralwidget) self.line.setFrameShadow(QtWidgets.QFrame.Plain) self.line.setLineWidth(10) self.line.setFrameShape(QtWidgets.QFrame.HLine) self.line.setObjectName("line") self.Menu.addWidget(self.line, 1, 0, 1, 1) self.up = QtWidgets.QWidget(self.centralwidget) self.up.setMinimumSize(QtCore.QSize(0, 320)) self.up.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.up.setObjectName("up") self.up.setStyleSheet( 'QWidget {background-color: #000000; color: blue;}') self.gridLayout_up = QtWidgets.QGridLayout(self.up) self.gridLayout_up.setContentsMargins(-1, 0, -1, 0) self.gridLayout_up.setHorizontalSpacing(0) self.gridLayout_up.setVerticalSpacing(20) self.gridLayout_up.setObjectName("gridLayout_up") self.brake_bar = QtWidgets.QWidget(self.up) self.brake_bar.setMinimumSize(QtCore.QSize(80, 220)) self.brake_bar.setMaximumSize(QtCore.QSize(80, 250)) self.brake_bar.setObjectName("brake_bar") self.verticalLayout_break = QtWidgets.QVBoxLayout(self.brake_bar) self.verticalLayout_break.setContentsMargins(15, 0, 15, 0) self.verticalLayout_break.setSpacing(0) self.verticalLayout_break.setObjectName("verticalLayout_break") self.brake_icon = QtWidgets.QLabel(self.brake_bar) self.brake_icon.setMinimumSize(QtCore.QSize(40, 40)) self.brake_icon.setMaximumSize(QtCore.QSize(40, 40)) self.brake_icon.setText("") self.brake_icon.setObjectName("brake_icon") self.verticalLayout_break.addWidget(self.brake_icon) self.brake_bar1 = QtWidgets.QLabel(self.brake_bar) self.brake_bar1.setText("") self.brake_bar1.setObjectName("brake_bar1") self.verticalLayout_break.addWidget(self.brake_bar1) self.brake_bar2 = QtWidgets.QLabel(self.brake_bar) self.brake_bar2.setText("") self.brake_bar2.setObjectName("brake_bar2") self.verticalLayout_break.addWidget(self.brake_bar2) self.brake_bar3 = QtWidgets.QLabel(self.brake_bar) self.brake_bar3.setText("") self.brake_bar3.setObjectName("brake_bar3") self.verticalLayout_break.addWidget(self.brake_bar3) self.brake_bar4 = QtWidgets.QLabel(self.brake_bar) self.brake_bar4.setObjectName("brake_bar4") self.verticalLayout_break.addWidget(self.brake_bar4) self.brake_bar5 = QtWidgets.QLabel(self.brake_bar) self.brake_bar5.setObjectName("label_4") self.verticalLayout_break.addWidget(self.brake_bar5) self.gridLayout_up.addWidget(self.brake_bar, 1, 1, 2, 1) self.acc_bar = QtWidgets.QWidget(self.up) self.acc_bar.setMinimumSize(QtCore.QSize(80, 220)) self.acc_bar.setMaximumSize(QtCore.QSize(80, 250)) self.acc_bar.setObjectName("acc_bar") self.verticalLayout_acc = QtWidgets.QVBoxLayout(self.acc_bar) self.verticalLayout_acc.setContentsMargins(15, 0, 15, 0) self.verticalLayout_acc.setSpacing(0) self.verticalLayout_acc.setObjectName("verticalLayout_acc") self.acc_icon = QtWidgets.QLabel(self.acc_bar) self.acc_icon.setMinimumSize(QtCore.QSize(40, 40)) self.acc_icon.setMaximumSize(QtCore.QSize(40, 40)) # self.acc_icon.setLayoutDirection(QtCore.Qt.LeftToRight) # self.acc_icon.setAutoFillBackground(False) # self.acc_icon.setFrameShape(QtWidgets.QFrame.NoFrame) # self.acc_icon.setAlignment(QtCore.Qt.AlignJustify | QtCore.Qt.AlignVCenter) self.acc_icon.setText("") self.acc_icon.setObjectName("acc_icon") self.verticalLayout_acc.addWidget(self.acc_icon) self.acc_bar1 = QtWidgets.QLabel(self.acc_bar) self.acc_bar1.setText("") self.acc_bar1.setObjectName("acc_bar1") self.verticalLayout_acc.addWidget(self.acc_bar1) self.acc_bar2 = QtWidgets.QLabel(self.acc_bar) self.acc_bar2.setText("") self.acc_bar2.setObjectName("acc_bar2") self.verticalLayout_acc.addWidget(self.acc_bar2) self.acc_bar3 = QtWidgets.QLabel(self.acc_bar) self.acc_bar3.setText("") self.acc_bar3.setObjectName("acc_bar3") self.verticalLayout_acc.addWidget(self.acc_bar3) self.acc_bar4 = QtWidgets.QLabel(self.acc_bar) self.acc_bar4.setObjectName("accbar4") self.verticalLayout_acc.addWidget(self.acc_bar4) self.acc_bar5 = QtWidgets.QLabel(self.acc_bar) self.acc_bar5.setObjectName("acc_bar5") self.verticalLayout_acc.addWidget(self.acc_bar5) self.gridLayout_up.addWidget(self.acc_bar, 1, 0, 2, 1) self.turn_bar = QtWidgets.QWidget(self.up) self.turn_bar.setMinimumSize(QtCore.QSize(80, 220)) self.turn_bar.setMaximumSize(QtCore.QSize(80, 250)) self.turn_bar.setObjectName("turn_bar") self.verticalLayout_turn = QtWidgets.QVBoxLayout(self.turn_bar) self.verticalLayout_turn.setContentsMargins(15, 0, 15, 0) self.verticalLayout_turn.setSpacing(0) self.verticalLayout_turn.setObjectName("verticalLayout_turn") self.turn_icon = QtWidgets.QLabel(self.turn_bar) self.turn_icon.setMinimumSize(QtCore.QSize(40, 40)) self.turn_icon.setMaximumSize(QtCore.QSize(40, 40)) self.turn_icon.setText("") self.turn_icon.setObjectName("turn_icon") self.verticalLayout_turn.addWidget(self.turn_icon) self.turn_bar1 = QtWidgets.QLabel(self.turn_bar) self.turn_bar1.setText("") self.turn_bar1.setObjectName("turn_bar1") self.verticalLayout_turn.addWidget(self.turn_bar1) self.turn_bar2 = QtWidgets.QLabel(self.turn_bar) self.turn_bar2.setText("") self.turn_bar2.setObjectName("turn_bar2") self.verticalLayout_turn.addWidget(self.turn_bar2) self.turn_bar3 = QtWidgets.QLabel(self.turn_bar) self.turn_bar3.setText("") self.turn_bar3.setObjectName("turn_bar3") self.verticalLayout_turn.addWidget(self.turn_bar3) self.turn_bar4 = QtWidgets.QLabel(self.turn_bar) self.turn_bar4.setObjectName("turn_bar4") self.verticalLayout_turn.addWidget(self.turn_bar4) self.turn_bar5 = QtWidgets.QLabel(self.turn_bar) self.turn_bar5.setObjectName("turn_bar5") self.verticalLayout_turn.addWidget(self.turn_bar5) self.gridLayout_up.addWidget(self.turn_bar, 1, 5, 2, 1) self.swerve_bar = QtWidgets.QWidget(self.up) self.swerve_bar.setMinimumSize(QtCore.QSize(80, 220)) self.swerve_bar.setMaximumSize(QtCore.QSize(80, 250)) self.swerve_bar.setObjectName("swerve_bar") self.verticalLayout_swerve = QtWidgets.QVBoxLayout(self.swerve_bar) self.verticalLayout_swerve.setContentsMargins(15, 0, 15, 0) self.verticalLayout_swerve.setSpacing(0) self.verticalLayout_swerve.setObjectName("verticalLayout_swerve") self.swerve_icon = QtWidgets.QLabel(self.swerve_bar) self.swerve_icon.setMinimumSize(QtCore.QSize(40, 40)) self.swerve_icon.setMaximumSize(QtCore.QSize(40, 40)) self.swerve_icon.setText("") self.swerve_icon.setObjectName("swerve_icon") self.verticalLayout_swerve.addWidget(self.swerve_icon) self.swerve_bar1 = QtWidgets.QLabel(self.swerve_bar) self.swerve_bar1.setText("") self.swerve_bar1.setObjectName("swerve_bar1") self.verticalLayout_swerve.addWidget(self.swerve_bar1) self.swerve_bar2 = QtWidgets.QLabel(self.swerve_bar) self.swerve_bar2.setText("") self.swerve_bar2.setObjectName("swerve_bar2") self.verticalLayout_swerve.addWidget(self.swerve_bar2) self.swerve_bar3 = QtWidgets.QLabel(self.swerve_bar) self.swerve_bar3.setText("") self.swerve_bar3.setObjectName("swerve_bar3") self.verticalLayout_swerve.addWidget(self.swerve_bar3) self.swerve_bar4 = QtWidgets.QLabel(self.swerve_bar) self.swerve_bar4.setObjectName("swerve_bar4") self.verticalLayout_swerve.addWidget(self.swerve_bar4) self.swerve_bar5 = QtWidgets.QLabel(self.swerve_bar) self.swerve_bar5.setObjectName("swerve_bar5") self.verticalLayout_swerve.addWidget(self.swerve_bar5) self.gridLayout_up.addWidget(self.swerve_bar, 1, 6, 2, 1) self.gridLayout_up.addWidget(self.acc_bar, 1, 0, 1, 1) pg.setConfigOption('background', '#000000') self.backCircle = PlotWidget(self.up) # self.backCircle = QtWidgets.QWidget(self.up) self.backCircle.setMinimumSize(QtCore.QSize(50, 50)) self.backCircle.setMaximumSize(QtCore.QSize(249, 249)) self.backCircle.setObjectName("backCircle") self.backCircle.getPlotItem().hideAxis('bottom') self.backCircle.getPlotItem().hideAxis('left') self.backCircleLayout = QtWidgets.QGridLayout(self.backCircle) self.backCircleLayout.setContentsMargins(58, 50, 60, 50) self.backCircleLayout.setObjectName("backCircleLayout") # self.backCircle.setStyleSheet('QWidget {background-color: red; color: blue;}') self.feedback = QtWidgets.QLabel(self.backCircle) self.feedback.setMinimumSize(QtCore.QSize(50, 50)) self.feedback.setMaximumSize(QtCore.QSize(320, 320)) self.feedback.setText("") self.feedback.setAlignment(QtCore.Qt.AlignCenter) self.feedback.setObjectName("feedback") # self.feedback.setStyleSheet('QWidget {background-color: yellow; color: blue;}') self.backCircleLayout.addWidget(self.feedback, 0, 0, 1, 1) self.gridLayout_up.addWidget(self.backCircle, 0, 3, 2, 1) self.Menu.addWidget(self.up, 0, 0, 1, 1) self.verticalLayout.addLayout(self.Menu) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 750, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) # these are three control buttons self.exit.setFixedSize(15, 15) self.visit.setFixedSize(15, 15) self.mini.setFixedSize(15, 15) self.exit.setStyleSheet( '''QPushButton{background:#F76677;border-radius:5px;}QPushButton:hover{background:red;}''' ) self.next_page.setFixedSize(80, 20) # self.visit.setStyleSheet('''QPushButton{background:#F7D674;border-radius:5px;}QPushButton:hover{background:yellow;}''') # self.mini.setStyleSheet('''QPushButton{background:#6DDF6D;border-radius:5px;}QPushButton:hover{background:green;}''') self._badge1 = QtGui.QPixmap('icons/bars/Car.png') self._badge2 = QtGui.QPixmap('icons/events/Less_Coins.png') # self._badge3 = QtGui.QPixmap('icons/Badges/png/003-bronze-medal.png') self.label_3.setPixmap(self._badge1) self.label_3.setScaledContents(True) self.label_3.setMaximumSize(QtCore.QSize(10, 40)) self.label_2.setPixmap(self._badge2) self.label_2.setScaledContents(True) self.label_2.setMaximumSize(QtCore.QSize(20, 30)) self.total_coins_score.setStyleSheet( 'QWidget {background-color: #000000; color: yellow;}') self.total_coins.setStyleSheet( 'QWidget {background-color: #000000; color: gray;}') self.trip_score_score.setStyleSheet( 'QWidget {background-color: #000000; color: yellow;}') self.trip_score.setStyleSheet( 'QWidget {background-color: #000000; color: gray;}') self.current_score_text.setStyleSheet( 'QWidget {background-color: #000000; color: gray;}') # beautify window self.setWindowFlag(QtCore.Qt.FramelessWindowHint) # hide the boarder # self.setWindowOpacity(0.98) # self.setAttribute(QtCore.Qt.WA_TranslucentBackground) # set transparent window self.exit.clicked.connect(self.close) # close window self.mini.clicked.connect(self.showMinimized) # minimum window self.windowMoved.connect(self.move) # move window # draw graph of lines self.flowing_scores.setDownsampling(mode='peak') self.flowing_scores.setClipToView(True) self.flowing_scores.setXRange(0, 100) self.flowing_scores.setLimits(xMax=0) self.pen_y = self.flowing_scores.plot() self.pen_y.setPen(pg.mkPen('y', width=3)) self.data3 = np.empty(10) self.ptr3 = 0 #draw acc icon self.acc_icon.setPixmap(self.acc_icon_png) self.acc_icon.setScaledContents(True) self.acc_icon.setMaximumSize(QtCore.QSize(40, 40)) self.turn_icon.setPixmap(self.turn_icon_png) self.turn_icon.setScaledContents(True) self.turn_icon.setMaximumSize(QtCore.QSize(40, 40)) self.brake_icon.setPixmap(self.brake_icon_png) self.brake_icon.setScaledContents(True) self.brake_icon.setMaximumSize(QtCore.QSize(40, 40)) self.swerve_icon.setPixmap(self.swerve_icon_png) self.swerve_icon.setScaledContents(True) self.swerve_icon.setMaximumSize(QtCore.QSize(40, 40)) self.setFeedBack(0, 'acc') self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def mousePressEvent(self, event): if event.button() == QtCore.Qt.LeftButton: self.mPos = event.pos() event.accept() def mouseReleaseEvent(self, event): self.mPos = None event.accept() def mouseMoveEvent(self, event): if event.buttons() == QtCore.Qt.LeftButton and self.mPos: self.windowMoved.emit(self.mapToGlobal(event.pos() - self.mPos)) event.accept() # set current score and update def setCurrentScore(self, score): self.current_score.setText(str(score)) # set Total score for trip def setTotalScore(self, score): self.trip_score.setText(str(score)) def setFeedBack(self, level: int, type: str): if level == 0: self.backCircle.clear() self.backCircle.addItem(self.green_glow) elif level == 1: self.backCircle.clear() self.backCircle.addItem(self.yellow_glow) elif level == 2: self.backCircle.clear() self.backCircle.addItem(self.orange_glow) self.feedback.setPixmap(self.acc_icon_png) if type == 'acc': self.feedback.setPixmap(self.acc_icon_png) self.feedback.setScaledContents(True) self.feedback.setMaximumSize(QtCore.QSize(100, 150)) elif type == 'brake': self.feedback.setPixmap(self.brake_icon_png) self.feedback.setScaledContents(True) self.feedback.setMaximumSize(QtCore.QSize(100, 150)) elif type == 'turn': self.feedback.setPixmap(self.turn_icon_png) self.feedback.setScaledContents(True) self.feedback.setMaximumSize(QtCore.QSize(100, 150)) elif type == 'swerve': self.feedback.setPixmap(self.swerve_icon_png) self.feedback.setScaledContents(True) self.feedback.setMaximumSize(QtCore.QSize(100, 150)) else: self.feedback.clear() def setBar(self, level: int, type: str): if type == 'acc': self.initalface(type) self.change_acc_bar(level) elif type == 'brake': self.initalface(type) self.change_brake_bar(level) elif type == 'turn': self.initalface(type) self.change_turn_bar(level) elif type == 'swerve': self.initalface(type) self.change_swerve_bar(level) def initalface(self, type: str): if type == 'acc': self.acc_bar1.setPixmap(self.grey_bar) self.acc_bar2.setPixmap(self.grey_bar) self.acc_bar3.setPixmap(self.grey_bar) self.acc_bar4.setPixmap(self.grey_bar) self.acc_bar5.setPixmap(self.grey_bar) self.acc_bar1.setScaledContents(True) self.acc_bar2.setScaledContents(True) self.acc_bar3.setScaledContents(True) self.acc_bar4.setScaledContents(True) self.acc_bar5.setScaledContents(True) self.acc_bar1.setMaximumSize(QtCore.QSize(40, 47)) self.acc_bar2.setMaximumSize(QtCore.QSize(40, 47)) self.acc_bar3.setMaximumSize(QtCore.QSize(40, 47)) self.acc_bar4.setMaximumSize(QtCore.QSize(40, 47)) self.acc_bar5.setMaximumSize(QtCore.QSize(40, 47)) elif type == 'turn': self.turn_bar1.setPixmap(self.grey_bar) self.turn_bar2.setPixmap(self.grey_bar) self.turn_bar3.setPixmap(self.grey_bar) self.turn_bar4.setPixmap(self.grey_bar) self.turn_bar5.setPixmap(self.grey_bar) self.turn_bar1.setScaledContents(True) self.turn_bar2.setScaledContents(True) self.turn_bar3.setScaledContents(True) self.turn_bar4.setScaledContents(True) self.turn_bar5.setScaledContents(True) self.turn_bar1.setMaximumSize(QtCore.QSize(40, 47)) self.turn_bar2.setMaximumSize(QtCore.QSize(40, 47)) self.turn_bar3.setMaximumSize(QtCore.QSize(40, 47)) self.turn_bar4.setMaximumSize(QtCore.QSize(40, 47)) self.turn_bar5.setMaximumSize(QtCore.QSize(40, 47)) elif type == 'swerve': self.swerve_bar1.setPixmap(self.grey_bar) self.swerve_bar2.setPixmap(self.grey_bar) self.swerve_bar3.setPixmap(self.grey_bar) self.swerve_bar4.setPixmap(self.grey_bar) self.swerve_bar5.setPixmap(self.grey_bar) self.swerve_bar1.setScaledContents(True) self.swerve_bar2.setScaledContents(True) self.swerve_bar3.setScaledContents(True) self.swerve_bar4.setScaledContents(True) self.swerve_bar5.setScaledContents(True) self.swerve_bar1.setMaximumSize(QtCore.QSize(40, 47)) self.swerve_bar2.setMaximumSize(QtCore.QSize(40, 47)) self.swerve_bar3.setMaximumSize(QtCore.QSize(40, 47)) self.swerve_bar4.setMaximumSize(QtCore.QSize(40, 47)) self.swerve_bar5.setMaximumSize(QtCore.QSize(40, 47)) elif type == 'brake': self.brake_bar1.setPixmap(self.grey_bar) self.brake_bar2.setPixmap(self.grey_bar) self.brake_bar3.setPixmap(self.grey_bar) self.brake_bar4.setPixmap(self.grey_bar) self.brake_bar5.setPixmap(self.grey_bar) self.brake_bar1.setScaledContents(True) self.brake_bar2.setScaledContents(True) self.brake_bar3.setScaledContents(True) self.brake_bar4.setScaledContents(True) self.brake_bar5.setScaledContents(True) self.brake_bar1.setMaximumSize(QtCore.QSize(40, 47)) self.brake_bar2.setMaximumSize(QtCore.QSize(40, 47)) self.brake_bar3.setMaximumSize(QtCore.QSize(40, 47)) self.brake_bar5.setMaximumSize(QtCore.QSize(40, 47)) self.brake_bar4.setMaximumSize(QtCore.QSize(40, 47)) def change_acc_bar(self, level: int): if level == 0: self.acc_bar1.setPixmap(self.grey_bar) self.acc_bar2.setPixmap(self.grey_bar) self.acc_bar3.setPixmap(self.bottom_bar) elif level == 1: self.acc_bar1.setPixmap(self.grey_bar) self.acc_bar2.setPixmap(self.medium_bar) self.acc_bar3.setPixmap(self.bottom_bar) elif level == 2: self.acc_bar1.setPixmap(self.top_bar) self.acc_bar2.setPixmap(self.medium_bar) self.acc_bar3.setPixmap(self.bottom_bar) self.acc_bar1.setScaledContents(True) self.acc_bar2.setScaledContents(True) self.acc_bar3.setScaledContents(True) self.acc_bar1.setMaximumSize(QtCore.QSize(40, 47)) self.acc_bar2.setMaximumSize(QtCore.QSize(40, 47)) self.acc_bar3.setMaximumSize(QtCore.QSize(40, 47)) def change_turn_bar(self, level: int): if level == 0: self.turn_bar1.setPixmap(self.grey_bar) self.turn_bar2.setPixmap(self.grey_bar) self.turn_bar3.setPixmap(self.bottom_bar) elif level == 1: self.turn_bar1.setPixmap(self.grey_bar) self.turn_bar2.setPixmap(self.medium_bar) self.turn_bar3.setPixmap(self.bottom_bar) elif level == 2: self.turn_bar1.setPixmap(self.top_bar) self.turn_bar2.setPixmap(self.medium_bar) self.turn_bar3.setPixmap(self.bottom_bar) self.turn_bar1.setScaledContents(True) self.turn_bar2.setScaledContents(True) self.turn_bar3.setScaledContents(True) self.turn_bar1.setMaximumSize(QtCore.QSize(40, 47)) self.turn_bar2.setMaximumSize(QtCore.QSize(40, 47)) self.turn_bar3.setMaximumSize(QtCore.QSize(40, 47)) def change_swerve_bar(self, level: int): if level == 0: self.swerve_bar1.setPixmap(self.grey_bar) self.swerve_bar2.setPixmap(self.grey_bar) self.swerve_bar3.setPixmap(self.bottom_bar) elif level == 1: self.swerve_bar1.setPixmap(self.grey_bar) self.swerve_bar2.setPixmap(self.medium_bar) self.swerve_bar3.setPixmap(self.bottom_bar) elif level == 2: self.swerve_bar1.setPixmap(self.top_bar) self.swerve_bar2.setPixmap(self.medium_bar) self.swerve_bar3.setPixmap(self.bottom_bar) self.swerve_bar1.setScaledContents(True) self.swerve_bar2.setScaledContents(True) self.swerve_bar3.setScaledContents(True) self.swerve_bar1.setMaximumSize(QtCore.QSize(40, 47)) self.swerve_bar2.setMaximumSize(QtCore.QSize(40, 47)) self.swerve_bar3.setMaximumSize(QtCore.QSize(40, 47)) def change_brake_bar(self, level: int): if level == 0: self.brake_bar1.setPixmap(self.grey_bar) self.brake_bar2.setPixmap(self.grey_bar) self.brake_bar3.setPixmap(self.bottom_bar) elif level == 1: self.brake_bar1.setPixmap(self.grey_bar) self.brake_bar2.setPixmap(self.medium_bar) self.brake_bar3.setPixmap(self.bottom_bar) elif level == 2: self.brake_bar1.setPixmap(self.top_bar) self.brake_bar2.setPixmap(self.medium_bar) self.brake_bar3.setPixmap(self.bottom_bar) self.brake_bar1.setScaledContents(True) self.brake_bar2.setScaledContents(True) self.brake_bar3.setScaledContents(True) self.brake_bar1.setMaximumSize(QtCore.QSize(40, 47)) self.brake_bar2.setMaximumSize(QtCore.QSize(40, 47)) self.brake_bar3.setMaximumSize(QtCore.QSize(40, 47)) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.next_page.setText(_translate("MainWindow", "Next Page>>")) self.total_coins_img.setText(_translate("MainWindow", "")) self.total_coins_score.setText(_translate("MainWindow", "27")) self.total_coins.setText(_translate("MainWindow", "Total Coins")) self.trip_score_img.setText(_translate("MainWindow", "")) self.trip_score_score.setText(_translate("MainWindow", "91")) self.trip_score.setText(_translate("MainWindow", "Trip Score")) self.current_score.setText(_translate("MainWindow", "86")) self.current_score_text.setText( _translate("MainWindow", "Current Score"))
class Ui_MainWindow(object): def __init__(self): self._coin_gold0 = QtGui.QPixmap('icons/events/coin_gold0.png') self._coin_gold1 = QtGui.QPixmap('icons/events/coin_gold1.png') self._coin_gold2 = QtGui.QPixmap('icons/events/coin_gold2.png') self._gold_coin = QtGui.QPixmap('icons/events/coin_gold0.png') self._grey_coin = QtGui.QPixmap('icons/events/coin_gold1.png') self.grey_bar = QtGui.QPixmap('icons/bars/grey_bar.png') self.top_bar = QtGui.QPixmap('icons/bars/top_bar.png') self.medium_bar = QtGui.QPixmap('icons/bars/medium_bar.png') self.bottom_bar = QtGui.QPixmap('icons/bars/bottom_bar.png') self.green_glow = pg.QtGui.QGraphicsPixmapItem( pg.QtGui.QPixmap('icons/glow/Green-Glow.png')) self.orange_glow = pg.QtGui.QGraphicsPixmapItem( pg.QtGui.QPixmap('icons/glow/Orange-Glow.png')) self.yellow_glow = pg.QtGui.QGraphicsPixmapItem( pg.QtGui.QPixmap('icons/glow/Yellow-Glow.png')) self.brake_icon = QtGui.QIcon('icons/events/Brake.svg') self.acc_icon = QtGui.QIcon('icons/events/Accelerate.svg') self.turn_icon = QtGui.QIcon('icons/events/Turn.svg') self.swerve_icon = QtGui.QIcon('icons/events/Swerve.svg') pass windowMoved = QtCore.pyqtSignal(QtCore.QPoint) def update2(self): data3 = self.data3 ptr3 = self.ptr3 data3[ptr3] = np.random.normal() ptr3 += 1 if ptr3 >= data3.shape[0]: tmp = data3 data3 = np.empty(data3.shape[0] * 2) data3[:tmp.shape[0]] = tmp self.pen1.setData(data3[:ptr3]) self.data3 = data3 if (ptr3 > 100): self.pen1.setPen(pg.mkPen('r', width=3)) self.pen1.setPos(-ptr3, 0) self.ptr3 = ptr3 def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(750, 500) MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded) self.centralwidget = QtWidgets.QWidget(MainWindow) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.centralwidget.sizePolicy().hasHeightForWidth()) self.centralwidget.setSizePolicy(sizePolicy) self.centralwidget.setObjectName("centralwidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout.setContentsMargins(5, 10, 5, 0) self.verticalLayout.setSpacing(0) self.verticalLayout.setObjectName("verticalLayout") self.bar = QtWidgets.QWidget(self.centralwidget) self.bar.setMaximumSize(QtCore.QSize(16777215, 30)) self.bar.setObjectName("bar") self.horizontalLayout = QtWidgets.QHBoxLayout(self.bar) self.horizontalLayout.setContentsMargins(-1, 5, 11, 5) self.horizontalLayout.setSpacing(9) self.horizontalLayout.setObjectName("horizontalLayout") self.exit = QtWidgets.QPushButton(self.bar) self.exit.setMaximumSize(QtCore.QSize(30, 20)) self.exit.setText("") self.exit.setObjectName("close") self.horizontalLayout.addWidget(self.exit) self.visit = QtWidgets.QPushButton(self.bar) self.visit.setMaximumSize(QtCore.QSize(30, 20)) self.visit.setText("") self.visit.setObjectName("visit") self.horizontalLayout.addWidget(self.visit) self.mini = QtWidgets.QPushButton(self.bar) self.mini.setMaximumSize(QtCore.QSize(30, 20)) self.mini.setFocusPolicy(QtCore.Qt.StrongFocus) self.mini.setText("") self.mini.setAutoDefault(False) self.mini.setDefault(False) self.mini.setFlat(False) self.mini.setObjectName("mini") self.horizontalLayout.addWidget(self.mini) spacerItem = QtWidgets.QSpacerItem(40, 15, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.next_page = QtWidgets.QPushButton(self.bar) self.next_page.setMaximumSize(QtCore.QSize(85, 30)) self.next_page.setObjectName("next_page") self.horizontalLayout.addWidget(self.next_page) self.verticalLayout.addWidget(self.bar) self.Menu = QtWidgets.QGridLayout() self.Menu.setObjectName("Menu") self.down = QtWidgets.QWidget(self.centralwidget) self.down.setMinimumSize(QtCore.QSize(0, 130)) self.down.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.down.setObjectName("down") self.gridLayout_down = QtWidgets.QGridLayout(self.down) self.gridLayout_down.setHorizontalSpacing(5) self.gridLayout_down.setObjectName("gridLayout_down") # pg.setConfigOption('background', '#17191A') self.widget = PlotWidget(self.down) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.widget.sizePolicy().hasHeightForWidth()) self.widget.setSizePolicy(sizePolicy) self.widget.setMinimumSize(QtCore.QSize(0, 0)) self.widget.setMaximumSize(QtCore.QSize(300, 120)) self.widget.setLayoutDirection(QtCore.Qt.LeftToRight) self.widget.setObjectName("widget") self.gridLayout_down.addWidget(self.widget, 0, 0, 1, 1) self.current_score = QtWidgets.QLabel(self.down) # sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) # sizePolicy.setHorizontalStretch(0) # sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.current_score.sizePolicy().hasHeightForWidth()) self.current_score.setSizePolicy(sizePolicy) self.current_score.setMinimumSize(QtCore.QSize(20, 60)) self.current_score.setMaximumSize(QtCore.QSize(300, 120)) font = QtGui.QFont() font.setFamily("Brush Script Std") font.setPointSize(50) font.setBold(True) font.setWeight(75) self.current_score.setFont(font) self.current_score.setAlignment(QtCore.Qt.AlignCenter) self.current_score.setObjectName("CurrentScore") self.gridLayout_down.addWidget(self.current_score, 0, 1, 1, 1) self.total_score = QtWidgets.QPushButton() self.total_score.setWindowFlag(QtCore.Qt.FramelessWindowHint) self.total_score.setMinimumSize(QtCore.QSize(0, 0)) self.total_score.setMaximumSize(QtCore.QSize(250, 120)) self.total_score.setFlat(True) font = QtGui.QFont() font.setPointSize(15) font.setKerning(True) font.setBold(True) font.setFamily("Brush Script Std") self.total_score.setStyleSheet( 'QPushButton {background-color: #17191A; color: white;}') self.total_score.setFont(font) self.total_score.setLayoutDirection(QtCore.Qt.RightToLeft) # self.TotalScore.setAlignment(QtCore.Qt.AlignCenter) self.total_score.setObjectName("TotalScore") self.gridLayout_down.addWidget(self.total_score, 0, 2, 1, 1) self.Menu.addWidget(self.down, 4, 0, 1, 1) self.line = QtWidgets.QFrame(self.centralwidget) self.line.setFrameShadow(QtWidgets.QFrame.Plain) self.line.setLineWidth(10) self.line.setFrameShape(QtWidgets.QFrame.HLine) self.line.setObjectName("line") self.Menu.addWidget(self.line, 1, 0, 1, 1) self.up = QtWidgets.QWidget(self.centralwidget) self.up.setMinimumSize(QtCore.QSize(0, 0)) self.up.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.up.setObjectName("up") self.gridLayout_up = QtWidgets.QGridLayout(self.up) self.gridLayout_up.setContentsMargins(-1, 0, -1, 0) self.gridLayout_up.setHorizontalSpacing(0) self.gridLayout_up.setVerticalSpacing(0) self.gridLayout_up.setSpacing(0) self.gridLayout_up.setObjectName("gridLayout_up") self.turn_bar = QtWidgets.QWidget(self.up) self.turn_bar.setMaximumSize(QtCore.QSize(80, 220)) self.turn_bar.setObjectName("Turn_bar") self.verticalLayout_turn = QtWidgets.QVBoxLayout(self.turn_bar) self.verticalLayout_turn.setContentsMargins(15, 0, 15, 0) self.verticalLayout_turn.setSpacing(0) self.verticalLayout_turn.setObjectName("verticalLayout_turn") self.turn_bar1 = QtWidgets.QLabel(self.turn_bar) self.turn_bar1.setText("") self.turn_bar1.setObjectName("turn_bar1") self.verticalLayout_turn.addWidget(self.turn_bar1) self.turn_bar2 = QtWidgets.QLabel(self.turn_bar) self.turn_bar2.setText("") self.turn_bar2.setObjectName("turn_bar2") self.verticalLayout_turn.addWidget(self.turn_bar2) self.turn_bar3 = QtWidgets.QLabel(self.turn_bar) self.turn_bar3.setText("") self.turn_bar3.setObjectName("turn_bar3") self.verticalLayout_turn.addWidget(self.turn_bar3) self.gridLayout_up.addWidget(self.turn_bar, 0, 5, 1, 1) self.turn_level = QtWidgets.QWidget(self.up) self.turn_level.setMaximumSize(QtCore.QSize(80, 35)) self.turn_level.setObjectName("Turn_level") self.gridLayout_up.addWidget(self.turn_level, 1, 5, 1, 1) self.acc_bar = QtWidgets.QWidget(self.up) self.acc_bar.setMaximumSize(QtCore.QSize(80, 220)) self.acc_bar.setObjectName("Acc_bar") self.verticalLayout_acc = QtWidgets.QVBoxLayout(self.acc_bar) self.verticalLayout_acc.setContentsMargins(15, 0, 15, 0) self.verticalLayout_acc.setSpacing(0) self.verticalLayout_acc.setObjectName("verticalLayout_acc") self.acc_bar1 = QtWidgets.QLabel(self.acc_bar) self.acc_bar1.setText("") self.acc_bar1.setObjectName("acc_bar1") self.verticalLayout_acc.addWidget(self.acc_bar1) self.acc_bar2 = QtWidgets.QLabel(self.acc_bar) self.acc_bar2.setText("") self.acc_bar2.setObjectName("acc_bar2") self.verticalLayout_acc.addWidget(self.acc_bar2) self.acc_bar3 = QtWidgets.QLabel(self.acc_bar) self.acc_bar3.setText("") self.acc_bar3.setObjectName("acc_bar3") self.verticalLayout_acc.addWidget(self.acc_bar3) self.gridLayout_up.addWidget(self.acc_bar, 0, 0, 1, 1) spacer1 = QtWidgets.QSpacerItem(15, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) self.gridLayout_up.addItem(spacer1, 0, 2, 1, 1) pg.setConfigOption('background', '#FCFCFC') self.backCircle = PlotWidget(self.up) self.backCircle.setMinimumSize(QtCore.QSize(50, 50)) self.backCircle.setMaximumSize(QtCore.QSize(300, 320)) self.backCircle.setObjectName("backCircle") self.backCircle.getPlotItem().hideAxis('bottom') self.backCircle.getPlotItem().hideAxis('left') self.backCircleLayout = QtWidgets.QGridLayout(self.backCircle) self.backCircleLayout.setContentsMargins(60, 50, 60, 50) self.backCircleLayout.setObjectName("backCircleLayout") self.feedback = QtWidgets.QToolButton(self.backCircle) self.feedback.setEnabled(False) self.feedback.setMinimumSize(QtCore.QSize(50, 50)) self.feedback.setMaximumSize(QtCore.QSize(320, 320)) self.feedback.setFocusPolicy(QtCore.Qt.TabFocus) self.feedback.setText("") self.feedback.setObjectName("feedback") self.backCircleLayout.addWidget(self.feedback, 0, 0, 1, 1) self.gridLayout_up.addWidget(self.backCircle, 0, 3, 2, 1) self.brake_bar = QtWidgets.QWidget(self.up) self.brake_bar.setMaximumSize(QtCore.QSize(80, 220)) self.brake_bar.setObjectName("Brake_bar") self.verticalLayout_brake = QtWidgets.QVBoxLayout(self.brake_bar) self.verticalLayout_brake.setContentsMargins(15, 0, 15, 0) self.verticalLayout_brake.setSpacing(0) self.verticalLayout_brake.setObjectName("verticalLayout_brake") self.brake_bar1 = QtWidgets.QLabel(self.brake_bar) self.brake_bar1.setText("") self.brake_bar1.setObjectName("brake_bar1") self.verticalLayout_brake.addWidget(self.brake_bar1) self.brake_bar2 = QtWidgets.QLabel(self.brake_bar) self.brake_bar2.setText("") self.brake_bar2.setObjectName("brake_bar2") self.verticalLayout_brake.addWidget(self.brake_bar2) self.brake_bar3 = QtWidgets.QLabel(self.brake_bar) self.brake_bar3.setText("") self.brake_bar3.setObjectName("brake_bar3") self.verticalLayout_brake.addWidget(self.brake_bar3) self.gridLayout_up.addWidget(self.brake_bar, 0, 1, 1, 1) self.Swerve_level = QtWidgets.QWidget(self.up) self.Swerve_level.setMaximumSize(QtCore.QSize(80, 35)) self.Swerve_level.setObjectName("Swerve_level") self.gridLayout_up.addWidget(self.Swerve_level, 1, 6, 1, 1) self.Swerve_bar = QtWidgets.QWidget(self.up) self.Swerve_bar.setMaximumSize(QtCore.QSize(80, 220)) self.Swerve_bar.setObjectName("Swerve_bar") self.verticalLayout_swerve = QtWidgets.QVBoxLayout(self.Swerve_bar) self.verticalLayout_swerve.setContentsMargins(15, 0, 15, 0) self.verticalLayout_swerve.setSpacing(0) self.verticalLayout_swerve.setObjectName("verticalLayout_swerve") self.swerve_bar1 = QtWidgets.QLabel(self.Swerve_bar) self.swerve_bar1.setText("") self.swerve_bar1.setObjectName("swerve_bar1") self.verticalLayout_swerve.addWidget(self.swerve_bar1) self.swerve_bar2 = QtWidgets.QLabel(self.Swerve_bar) self.swerve_bar2.setText("") self.swerve_bar2.setObjectName("swerve_bar2") self.verticalLayout_swerve.addWidget(self.swerve_bar2) self.swerve_bar3 = QtWidgets.QLabel(self.Swerve_bar) self.swerve_bar3.setText("") self.swerve_bar3.setObjectName("swerve_bar3") self.verticalLayout_swerve.addWidget(self.swerve_bar3) self.gridLayout_up.addWidget(self.Swerve_bar, 0, 6, 1, 1) self.acc_level = PlotWidget(self.up) self.acc_level.setMaximumSize(QtCore.QSize(80, 35)) self.acc_level.setObjectName("Acc_level") self.acc_level.setFocusPolicy(QtCore.Qt.TabFocus) self.acc_level.getPlotItem().hideAxis('bottom') self.acc_level.getPlotItem().hideAxis('left') self.gridLayout_up.addWidget(self.acc_level, 1, 0, 1, 1) self.brake_level = QtWidgets.QWidget(self.up) self.brake_level.setMaximumSize(QtCore.QSize(80, 35)) self.brake_level.setObjectName("Brake_level") self.gridLayout_up.addWidget(self.brake_level, 1, 1, 1, 1) spacer2 = QtWidgets.QSpacerItem(15, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) self.gridLayout_up.addItem(spacer2, 0, 4, 1, 1) self.Menu.addWidget(self.up, 0, 0, 1, 1) self.verticalLayout.addLayout(self.Menu) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 750, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) # these are three control buttons self.exit.setFixedSize(15, 15) self.visit.setFixedSize(15, 15) self.mini.setFixedSize(15, 15) self.exit.setStyleSheet( '''QPushButton{background:#F76677;border-radius:5px;}QPushButton:hover{background:red;}''' ) self.next_page.setFixedSize(80, 20) # self.visit.setStyleSheet('''QPushButton{background:#F7D674;border-radius:5px;}QPushButton:hover{background:yellow;}''') # self.mini.setStyleSheet('''QPushButton{background:#6DDF6D;border-radius:5px;}QPushButton:hover{background:green;}''') # beautify window self.setWindowFlag(QtCore.Qt.FramelessWindowHint) # hide the boarder self.setWindowOpacity(0.98) self.setAttribute( QtCore.Qt.WA_TranslucentBackground) # set transparent window self.exit.clicked.connect(self.close) # close window self.mini.clicked.connect(self.showMinimized) # minimum window self.windowMoved.connect(self.move) # move window self.acc_pic_coin = QtWidgets.QLabel(self.acc_level) self.acc_pic_coin.setMargin(5) self.acc_pic_coin.setPixmap(self._gold_coin) self.acc_pic_coin.setScaledContents(True) self.acc_pic_coin.setMaximumSize(QtCore.QSize(80, 31)) self.brake_pic_coin = QtWidgets.QLabel(self.brake_level) self.brake_pic_coin.setMargin(5) self.brake_pic_coin.setPixmap(self._grey_coin) self.brake_pic_coin.setScaledContents(True) self.brake_pic_coin.setMaximumSize(QtCore.QSize(80, 31)) self.turn_pic_coin = QtWidgets.QLabel(self.turn_level) self.turn_pic_coin.setMargin(5) self.turn_pic_coin.setPixmap(self._grey_coin) self.turn_pic_coin.setScaledContents(True) self.turn_pic_coin.setMaximumSize(QtCore.QSize(80, 31)) self.swerve_pic_coin = QtWidgets.QLabel(self.Swerve_level) self.swerve_pic_coin.setMargin(5) self.swerve_pic_coin.setPixmap(self._gold_coin) self.swerve_pic_coin.setScaledContents(True) self.swerve_pic_coin.setMaximumSize(QtCore.QSize(80, 31)) # # self.acc_bar_top = QtWidgets.QLabel(self.acc_bar1) # self.acc_bar1.setPixmap(self.acc_bar1) # self.acc_bar1.setScaledContents(True) # self.acc_bar1.setMaximumSize(QtCore.QSize(50, 67)) # # # self.acc_bar2 = QtWidgets.QLabel(self.acc_bar2) # self.acc_bar2.setPixmap(self.acc_bar2) # self.acc_bar2.setScaledContents(True) # self.acc_bar2.setMaximumSize(QtCore.QSize(50, 67)) # # # self.acc_bar3 = QtWidgets.QLabel(self.acc_bar3) # self.acc_bar3.setPixmap(self.acc_bar3) # self.acc_bar3.setScaledContents(True) # self.acc_bar3.setMaximumSize(QtCore.QSize(50, 67)) # draw graph of lines--should be deleted later self.widget.setDownsampling(mode='peak') self.widget.setClipToView(True) self.widget.setXRange(0, 100) self.widget.setLimits(xMax=0) self.pen1 = self.widget.plot() self.pen1.setPen(pg.mkPen('y', width=3)) self.data3 = np.empty(10) self.ptr3 = 0 self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def mousePressEvent(self, event): if event.button() == QtCore.Qt.LeftButton: self.mPos = event.pos() event.accept() def mouseReleaseEvent(self, event): self.mPos = None event.accept() def mouseMoveEvent(self, event): if event.buttons() == QtCore.Qt.LeftButton and self.mPos: self.windowMoved.emit(self.mapToGlobal(event.pos() - self.mPos)) event.accept() # set current score and update def setCurrentScore(self, score): self.current_score.setText(str(score)) # set Total score for trip def setTotalScore(self, score): self.total_score.setText(str(score) + ' points') def setFeedBack(self, level: int, type: str): if level == 0: self.backCircle.clear() self.backCircle.addItem(self.green_glow) elif level == 1: self.backCircle.clear() self.backCircle.addItem(self.yellow_glow) elif level == 2: self.backCircle.clear() self.backCircle.addItem(self.orange_glow) if type == 'acc': self.feedback.setIcon(self.acc_icon) self.feedback.setIconSize(QtCore.QSize(150, 150)) elif type == 'brake': self.feedback.setIcon(self.brake_icon) self.feedback.setIconSize(QtCore.QSize(150, 150)) elif type == 'turn': self.feedback.setIcon(self.turn_icon) self.feedback.setIconSize(QtCore.QSize(150, 150)) elif type == 'swerve': self.feedback.setIcon(self.swerve_icon) self.feedback.setIconSize(QtCore.QSize(150, 150)) def change_icons(self, level: int, type: str): if type == 'acc': self.change_acc_icon(level) elif type == 'brake': self.change_brake_icon(level) elif type == 'turn': self.change_turn_icon(level) elif type == 'swerve': self.change_swerve_icon(level) def change_acc_icon(self, level: int): if level == 0: self.acc_pic_coin.setPixmap(self._coin_gold0) elif level == 1: self.acc_pic_coin.setPixmap(self._coin_gold1) elif level == 2: self.acc_pic_coin.setPixmap(self._coin_gold2) def change_brake_icon(self, level: int): if level == 0: self.brake_pic_coin.setPixmap(self._coin_gold0) elif level == 1: self.brake_pic_coin.setPixmap(self._coin_gold1) elif level == 2: self.brake_pic_coin.setPixmap(self._coin_gold2) def change_turn_icon(self, level: int): if level == 0: self.turn_pic_coin.setPixmap(self._coin_gold0) elif level == 1: self.turn_pic_coin.setPixmap(self._coin_gold1) elif level == 2: self.turn_pic_coin.setPixmap(self._coin_gold2) def change_swerve_icon(self, level: int): if level == 0: self.swerve_pic_coin.setPixmap(self._coin_gold0) elif level == 1: self.swerve_pic_coin.setPixmap(self._coin_gold1) elif level == 2: self.swerve_pic_coin.setPixmap(self._coin_gold2) def setBar(self, level: str, type: str): if type == 'acc': self.change_acc_bar(level) elif type == 'brake': self.change_brake_bar(level) elif type == 'turn': self.change_turn_bar(level) elif type == 'swerve': self.change_swerve_bar(level) def change_acc_bar(self, level): if level == 'safe': self.acc_bar1.setPixmap(self.grey_bar) self.acc_bar2.setPixmap(self.grey_bar) self.acc_bar3.setPixmap(self.bottom_bar) elif level == 'mediumrisk': self.acc_bar1.setPixmap(self.grey_bar) self.acc_bar2.setPixmap(self.medium_bar) self.acc_bar3.setPixmap(self.bottom_bar) elif level == 'highrisk': self.acc_bar1.setPixmap(self.top_bar) self.acc_bar2.setPixmap(self.medium_bar) self.acc_bar3.setPixmap(self.bottom_bar) self.acc_bar1.setScaledContents(True) self.acc_bar2.setScaledContents(True) self.acc_bar3.setScaledContents(True) self.acc_bar1.setMaximumSize(QtCore.QSize(50, 67)) self.acc_bar2.setMaximumSize(QtCore.QSize(50, 67)) self.acc_bar3.setMaximumSize(QtCore.QSize(50, 67)) def change_turn_bar(self, level): if level == 'safe': self.turn_bar1.setPixmap(self.grey_bar) self.turn_bar2.setPixmap(self.grey_bar) self.turn_bar3.setPixmap(self.bottom_bar) elif level == 'mediumrisk': self.turn_bar1.setPixmap(self.grey_bar) self.turn_bar2.setPixmap(self.medium_bar) self.turn_bar3.setPixmap(self.bottom_bar) elif level == 'highrisk': self.turn_bar1.setPixmap(self.top_bar) self.turn_bar2.setPixmap(self.medium_bar) self.turn_bar3.setPixmap(self.bottom_bar) self.turn_bar1.setScaledContents(True) self.turn_bar2.setScaledContents(True) self.turn_bar3.setScaledContents(True) self.turn_bar1.setMaximumSize(QtCore.QSize(50, 67)) self.turn_bar2.setMaximumSize(QtCore.QSize(50, 67)) self.turn_bar3.setMaximumSize(QtCore.QSize(50, 67)) def change_swerve_bar(self, level): if level == 'safe': self.swerve_bar1.setPixmap(self.grey_bar) self.swerve_bar2.setPixmap(self.grey_bar) self.swerve_bar3.setPixmap(self.bottom_bar) elif level == 'mediumrisk': self.swerve_bar1.setPixmap(self.grey_bar) self.swerve_bar2.setPixmap(self.medium_bar) self.swerve_bar3.setPixmap(self.bottom_bar) elif level == 'highrisk': self.swerve_bar1.setPixmap(self.top_bar) self.swerve_bar2.setPixmap(self.medium_bar) self.swerve_bar3.setPixmap(self.bottom_bar) self.swerve_bar1.setScaledContents(True) self.swerve_bar2.setScaledContents(True) self.swerve_bar3.setScaledContents(True) self.swerve_bar1.setMaximumSize(QtCore.QSize(50, 67)) self.swerve_bar2.setMaximumSize(QtCore.QSize(50, 67)) self.swerve_bar3.setMaximumSize(QtCore.QSize(50, 67)) def change_brake_bar( self, level, ): if level == 'safe': self.brake_bar1.setPixmap(self.grey_bar) self.brake_bar2.setPixmap(self.grey_bar) self.brake_bar3.setPixmap(self.bottom_bar) elif level == 'mediumrisk': self.brake_bar1.setPixmap(self.grey_bar) self.brake_bar2.setPixmap(self.medium_bar) self.brake_bar3.setPixmap(self.bottom_bar) elif level == 'highrisk': self.brake_bar1.setPixmap(self.top_bar) self.brake_bar2.setPixmap(self.medium_bar) self.brake_bar3.setPixmap(self.bottom_bar) self.brake_bar1.setScaledContents(True) self.brake_bar2.setScaledContents(True) self.brake_bar3.setScaledContents(True) self.brake_bar1.setMaximumSize(QtCore.QSize(50, 67)) self.brake_bar2.setMaximumSize(QtCore.QSize(50, 67)) self.brake_bar3.setMaximumSize(QtCore.QSize(50, 67)) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.current_score.setText(_translate("MainWindow", "86")) self.total_score.setText(_translate("MainWindow", "1240 points")) self.next_page.setText(_translate("MainWindow", "Next Page>>"))
class Plot(QObject, Object): """Generic widget to plot data series. The data series have to be added first, then one may add plot items using two them as x and y values. The series will be automatically updated when the master attribute fires a value_changed signal or based on an internal update timer. This master series has to be defined while adding it. .. todo:: Currently only setting both series of a plot item to the same, fixed length works. Find a better handling for this. """ TYPE_STATIC = 0 TYPE_TIME = 1 TYPE_SCALAR = 2 TYPE_SPECTRUM = 3 ROLE_SLAVE = 0 ROLE_MASTER = 1 def __init__(self, parent=None): """Construct a new Plot instance. :param parent: Optional, but needed for painting. :type parent: QGraphicsItem """ QObject.__init__(self) Object.__init__(self) self.parent = parent self.lines = {} self.items = {} #plot items self.data = {} #data series to the plot items self.master = None #id of the data series which triggers the update self.x_range = -1 #id of the data series which range defines the plot range self.mutex = QMutex() self.update_timer = QTimer(self) self.update_timer_start = None self.setup_ui() def setup_ui(self): """Setup the internal widget object. Called by :func:`__init__()`.""" self.widget = PlotWidget(self.parent) self.widget.setBackgroundBrush(QBrush(Qt.NoBrush)) count = len(self.janus.widgets["mainwindow"].findChildren(PlotWidget)) self.widget.setObjectName("plotWidgetPlot{0}".format(count)) self.widget.getAxis("bottom").setPen(QPen(Qt.black)) self.widget.getAxis("left").setPen(QPen(Qt.black)) def update_values(self, attribute=None): """Update all data of TYPE_TIME, TYPE_SCALAR, TYPE_SPECTRUM and plot it. This method is connected to either the the value_changed signal of the device instance that the master attribute belongs to or the internal update_timer if the master is of TYPE_TIME. :param attribute: Name of the master attribute which triggered the update or None if master is of TYPE_TIME. :type attribute: str|None """ self.mutex.lock() if not ((attribute is None and \ self.data[self.master]["data_type"] == Plot.TYPE_TIME) or \ (attribute == self.data[self.master]["name"] and \ self.data[self.master]["data_type"] in \ [Plot.TYPE_SCALAR, Plot.TYPE_SPECTRUM])): self.mutex.unlock() return if self.update_timer_start is not None: time_stamp = time.time() - self.update_timer_start update = len(self.items) * [False] #retrieve new data and cycle the buffer if max_length is reached for i in range(len(self.data)): if self.data[i]["data_type"] == Plot.TYPE_TIME: if self.data[i]["data"].shape[0] > self.data[i]["max_length"]: self.data[i]["data"].resize(self.data[i]["max_length"]) if self.data[i]["data"].shape[0] == self.data[i]["max_length"]: self.data[i]["data"] = numpy.concatenate( \ (self.data[i]["data"][1:], self.data[i]["data"][:1])) self.data[i]["data"][-1] = time_stamp else: numpy.concatenate(self.data[i]["data"], time_stamp) elif self.data[i]["data_type"] == Plot.TYPE_SCALAR: if self.data[i]["data"].shape[0] > self.data[i]["max_length"]: self.data[i]["data"].resize(self.data[i]["max_length"]) if self.data[i]["data"].shape[0] == self.data[i]["max_length"]: self.data[i]["data"] = numpy.concatenate( \ (self.data[i]["data"][1:], self.data[i]["data"][:1])) self.data[i]["data"][-1] = self.data[i]["getter"]( refresh=True) else: numpy.concatenate(self.data[i]["data"], \ self.data[i]["getter"](refresh=True)) elif self.data[i]["data_type"] == Plot.TYPE_SPECTRUM: self.data[i]["data"] = numpy.ndarray( self.data[i]["getter"](refresh=True)) if self.data[i]["data"].shape[0] >= self.data[i]["max_length"] or \ self.data[i]["data"].shape[0] < self.data[i]["min_length"]: self.data[i]["data"].resize(self.data[i]["max_length"]) else: continue for item in self.data[i]["items"]: update[item] = True #set view boundaries if tie_x_range is set to a dataset if self.x_range > -1: if self.data[self.x_range]["data_type"] == Plot.TYPE_TIME: self.widget.setLimits( \ xMin=self.data[self.x_range]["data"][1], \ xMax=self.data[self.x_range]["data"][-1]) else: self.widget.setLimits( \ xMin=numpy.amin(self.data[self.x_range]["data"]), \ xMax=numpy.amax(self.data[self.x_range]["data"])) #replot items for i in range(len(self.items)): if update[i]: self.items[i]["plot"].setData( \ self.data[self.items[i]["x"]]["data"], \ self.data[self.items[i]["y"]]["data"]) self.mutex.unlock() def add_plot_data(self, i, data=None, attr=None, data_type=TYPE_STATIC, \ role=ROLE_SLAVE, interval=1.0, \ min_length=0, length=-1, max_length=-1): """Add a data series to the plot. :param i: Id of the data series. Should be ascending natural numbers from 0 up. :type i: int :param data: Initial series of values. May be omited if not of TYPE_STATIC. :type data: numpy.ndarray|None :param attr: Reference to the getter function for an attribute of an device object. May be omited if not of TYPE_SCALAR or TYPE_SPECTRUM. :type attr: Device.method :param data_type: How the data is updated. May be one of the following - TYPE_STATIC no update, - TYPE_TIME append time stamp at trigger point, - TYPE_SCALAR append attribute value at trigger point, - or TYPE_SPECTRUM exchange data series by attribute values at trigger point. :type data_type: int|TYPE_STATIC|TYPE_TIME|TYPE_SCALAR|TYPE_SPECTRUM :param role: Should be ROLE_MASTER for data series which triggers the plot update. :type role: int|ROLE_SLAVE|ROLE_MASTER :param interval: Interval, to which the update_timer is set if of TYPE_TIME and ROLE_MASTER. May be omited otherwise. :type interval: float :param min_length: Data series will be extended to this length. May be omited. :type min_length: int :param length: Sets min_length and max_length to this value. -1 will will disable this feature. May be omited. :type length: int :param max_length: Data series will be shortened to this length. -1 will will disable this feature. May be omited. :type max_length: int :return: False on errors, True otherwise. :rtype: bool """ if length > -1: min_length = length max_length = length if data is not None and type(data) != numpy.ndarray: data = numpy.array(data) if data is not None and data.shape[0] < min_length: data.resize(min_length) if data is not None and max_length > 0 and data.shape[0] > max_length: data.resize(max_length) datum = { \ "data": data, \ "data_type": data_type, \ "min_length": min_length, \ "length": length, \ "max_length": max_length, \ "items" : []} if data_type in [Plot.TYPE_SCALAR, Plot.TYPE_SPECTRUM]: try: if callable(attr): device = attr.__self__ name = attr.__name__ else: return False except: return False datum["device"] = device #device instance datum["name"] = name #attribute name datum["getter"] = attr #attribute getter method if data is None and data_type == Plot.TYPE_SCALAR: start_value = attr(refresh=True) datum["data"] = numpy.full(min_length, start_value) elif data is None: datum["data"] = numpy.array(attr(refresh=True)) if datum["data"].shape[0] < min_length: datum["data"].resize(min_length) if max_length > 0 and datum["data"].shape[0] > max_length: datum["data"].resize(max_length) elif data_type == Plot.TYPE_TIME: datum["interval"] = interval if data is None: datum["data"] = numpy.linspace( \ -(min_length-1)*interval, 0, min_length) elif data_type != Plot.TYPE_STATIC: return False self.mutex.lock() self.data[i] = datum self.mutex.unlock() if role == Plot.ROLE_MASTER: self.set_master(i) return True def remove_plot_data(self, i): if i == self.master: self.unset_master() items = self.data[i]["items"] for item in items: self.remove_plot_item(item) del self.data[i] def add_plot_item(self, i, x, y, colour=Qt.red): """Add a plot item representing two already added data series. :param i: Id of the plot item. Should be ascending natural numbers from 0 up. :type i: int :param x: Id of the data series holding the x values. :type x: int :param y: Id of the data series holding the y values. :type y: int :param colour: Colour of the plot item. The default is red. :type colour: str|QRgb|QColor|Qt.GlobalColor """ self.items[i] = {"x": x, "y": y} self.data[x]["items"].append(i) self.data[y]["items"].append(i) self.items[i]["plot"] = PlotDataItem( \ self.data[x]["data"], \ self.data[y]["data"], \ pen=QColor(colour)) self.widget.addItem(self.items[i]["plot"]) def remove_plot_item(self, i): self.mutex.lock() self.data[self.items[i]["x"]]["items"].remove(i) self.data[self.items[i]["y"]]["items"].remove(i) self.widget.removeItem(self.items[i]["plot"]) del self.items[i] self.mutex.unlock() def add_line_item(self, i, **kwargs): self.mutex.lock() self.lines[i] = InfiniteLine(**kwargs) self.widget.addItem(self.lines[i]) self.mutex.unlock() def remove_line_item(self, i): self.mutex.lock() self.widget.removeItem(self.lines[i]) del self.lines[i] self.mutex.unlock() def set_master(self, i): """Set which data series will trigger a plot update. :param data: Id of the data series which triggers the update. :type data: int """ self.mutex.lock() if self.master is not None and self.master != i: self.unset_master() self.data[i]["device"].value_changed.disconnect(self.update_values) if self.data[i]["data_type"] in [Plot.TYPE_SCALAR, Plot.TYPE_SPECTRUM]: self.data[i]["device"].value_changed.connect(self.update_values) elif self.data[i]["data_type"] == Plot.TYPE_TIME: self.update_timer.timeout.connect(self.update_values) self.update_timer_start = time.time() self.update_timer.start(self.data[i]["interval"] * 1000.) self.master = i self.mutex.unlock() def unset_master(self): self.mutex.lock() if self.data[self.master]["data_type"] in \ [Plot.TYPE_SCALAR, Plot.TYPE_SPECTRUM]: self.data[self.master]["device"].value_changed.disconnect( \ self.update_values) elif self.data[self.master]["data_type"] == Plot.TYPE_TIME: self.update_timer.timeout.disconnect(self.update_values) self.update_timer.stop() self.mutex.unlock() def tie_x_range(self, data=-1): """Sets the plot x range to be the same as the given data series. :param data: Id of the data series holding the x values. :type data: int """ self.x_range = data def clear(self): data = list(self.data.keys()) for datum in data: self.remove_plot_data(datum) for line in list(self.lines.keys()): self.remove_line_item(line)
class Ui_MainWindow(QtGui.QMainWindow): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(846, 718) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout_2.setObjectName("verticalLayout_2") self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.resume = QtWidgets.QPushButton(self.centralwidget) font = QtGui.QFont() font.setFamily("Yu Gothic UI") font.setPointSize(11) font.setBold(True) font.setWeight(75) self.resume.setFont(font) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap("icons8-play-button-circled-96.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.resume.setIcon(icon) self.resume.setIconSize(QtCore.QSize(50, 50)) self.resume.setObjectName("resume") self.horizontalLayout.addWidget(self.resume) self.pause = QtWidgets.QPushButton(self.centralwidget) font = QtGui.QFont() font.setFamily("Yu Gothic UI") font.setPointSize(11) font.setBold(True) font.setWeight(75) self.pause.setFont(font) icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap("icons8-pause-squared-96.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pause.setIcon(icon1) self.pause.setIconSize(QtCore.QSize(50, 50)) self.pause.setObjectName("pause") self.horizontalLayout.addWidget(self.pause) self.clear = QtWidgets.QPushButton(self.centralwidget) font = QtGui.QFont() font.setFamily("Yu Gothic UI") font.setPointSize(11) font.setBold(True) font.setWeight(75) self.clear.setFont(font) icon2 = QtGui.QIcon() icon2.addPixmap(QtGui.QPixmap("icons8-erase-128xxx.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.clear.setIcon(icon2) self.clear.setIconSize(QtCore.QSize(50, 50)) self.clear.setObjectName("clear") self.horizontalLayout.addWidget(self.clear) self.verticalLayout.addLayout(self.horizontalLayout) self.show_ch1 = QtWidgets.QCheckBox(self.centralwidget) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.show_ch1.setFont(font) self.show_ch1.setObjectName("show_ch1") self.verticalLayout.addWidget(self.show_ch1) self.graphicsView = PlotWidget(self.centralwidget) self.graphicsView.setObjectName("graphicsView") self.verticalLayout.addWidget(self.graphicsView) self.graphicsView.plotItem.showGrid(x=True, y=True) self.graphicsView.plotItem.setMenuEnabled(False) self.graphicsView.plotItem.setLimits(xMin=0, xMax=15, yMin=-0.7, yMax=0.7) self.show_ch2 = QtWidgets.QCheckBox(self.centralwidget) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.show_ch2.setFont(font) self.show_ch2.setObjectName("show_ch2") self.verticalLayout.addWidget(self.show_ch2) self.graphicsView_2 = PlotWidget(self.centralwidget) self.graphicsView_2.setObjectName("graphicsView_2") self.verticalLayout.addWidget(self.graphicsView_2) self.graphicsView_2.plotItem.showGrid(x=True, y=True) self.graphicsView_2.plotItem.setMenuEnabled(False) self.show_cch3 = QtWidgets.QCheckBox(self.centralwidget) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.show_cch3.setFont(font) self.show_cch3.setObjectName("show_cch3") self.verticalLayout.addWidget(self.show_cch3) self.graphicsView_3 = PlotWidget(self.centralwidget) self.graphicsView_3.setObjectName("graphicsView_3") self.verticalLayout.addWidget(self.graphicsView_3) self.graphicsView_3.plotItem.showGrid(x=True, y=True) self.graphicsView_3.plotItem.setMenuEnabled(False) self.show_ch4 = QtWidgets.QCheckBox(self.centralwidget) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.show_ch4.setFont(font) self.show_ch4.setObjectName("show_ch4") self.verticalLayout.addWidget(self.show_ch4) self.graphicsView_4 = PlotWidget(self.centralwidget) self.graphicsView_4.setObjectName("graphicsView_4") self.verticalLayout.addWidget(self.graphicsView_4) self.graphicsView_4.plotItem.showGrid(x=True, y=True) self.graphicsView_4.plotItem.setMenuEnabled(False) self.show_ch5 = QtWidgets.QCheckBox(self.centralwidget) font = QtGui.QFont() font.setPointSize(8) font.setBold(True) font.setWeight(75) self.show_ch5.setFont(font) self.show_ch5.setObjectName("show_ch5") self.verticalLayout.addWidget(self.show_ch5) self.graphicsView_5 = PlotWidget(self.centralwidget) self.graphicsView_5.setObjectName("graphicsView_5") self.verticalLayout.addWidget(self.graphicsView_5) self.graphicsView_5.plotItem.showGrid(x=True, y=True) self.graphicsView_5.plotItem.setMenuEnabled(False) self.label = QtWidgets.QLabel(self.centralwidget) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.label.setFont(font) self.label.setObjectName("label") self.verticalLayout.addWidget(self.label) self.verticalLayout_2.addLayout(self.verticalLayout) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 846, 25)) self.menubar.setObjectName("menubar") self.menuchannel_1 = QtWidgets.QMenu(self.menubar) self.menuchannel_1.setObjectName("menuchannel_1") self.menuchannel_2 = QtWidgets.QMenu(self.menubar) self.menuchannel_2.setObjectName("menuchannel_2") self.menuchannel_3 = QtWidgets.QMenu(self.menubar) self.menuchannel_3.setObjectName("menuchannel_3") self.menuchannel_4 = QtWidgets.QMenu(self.menubar) self.menuchannel_4.setObjectName("menuchannel_4") self.menuchannel_5 = QtWidgets.QMenu(self.menubar) self.menuchannel_5.setObjectName("menuchannel_5") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.open_ch1 = QtWidgets.QAction(MainWindow) self.open_ch1.setObjectName("open_ch1") self.open_ch2 = QtWidgets.QAction(MainWindow) self.open_ch2.setObjectName("open_ch2") self.open_ch3 = QtWidgets.QAction(MainWindow) self.open_ch3.setObjectName("open_ch3") self.open_ch4 = QtWidgets.QAction(MainWindow) self.open_ch4.setObjectName("open_ch4") self.open_ch5 = QtWidgets.QAction(MainWindow) self.open_ch5.setObjectName("open_ch5") self.menuchannel_1.addAction(self.open_ch1) self.menuchannel_2.addAction(self.open_ch2) self.menuchannel_3.addAction(self.open_ch3) self.menuchannel_4.addAction(self.open_ch4) self.menuchannel_5.addAction(self.open_ch5) self.menubar.addAction(self.menuchannel_1.menuAction()) self.menubar.addAction(self.menuchannel_2.menuAction()) self.menubar.addAction(self.menuchannel_3.menuAction()) self.menubar.addAction(self.menuchannel_4.menuAction()) self.menubar.addAction(self.menuchannel_5.menuAction()) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) #creating timers self.timer1 = QtCore.QTimer() self.timer2 = QtCore.QTimer() self.timer3 = QtCore.QTimer() self.timer4 = QtCore.QTimer() self.timer5 = QtCore.QTimer() #events self.open_ch1.triggered.connect(lambda: self.load1()) self.open_ch2.triggered.connect(lambda: self.load2()) self.open_ch3.triggered.connect(lambda: self.load3()) self.open_ch4.triggered.connect(lambda: self.load4()) self.open_ch5.triggered.connect(lambda: self.load5()) self.pause.clicked.connect(lambda: self.pause_all()) self.resume.clicked.connect(lambda: self.resume_all()) self.clear.clicked.connect(lambda: self.clear_all()) self.show_ch1.stateChanged.connect(lambda: self.hide1()) self.show_ch2.stateChanged.connect(lambda: self.hide2()) self.show_cch3.stateChanged.connect(lambda: self.hide3()) self.show_ch4.stateChanged.connect(lambda: self.hide4()) self.show_ch5.stateChanged.connect(lambda: self.hide5()) def hide1(self): if (self.show_ch1.isChecked()): self.graphicsView.hide() else: self.graphicsView.show() def hide2(self): if (self.show_ch2.isChecked()): self.graphicsView_2.hide() else: self.graphicsView_2.show() def hide3(self): if (self.show_cch3.isChecked()): self.graphicsView_3.hide() else: self.graphicsView_3.show() def hide4(self): if (self.show_ch4.isChecked()): self.graphicsView_4.hide() else: self.graphicsView_4.show() def hide5(self): if (self.show_ch5.isChecked()): self.graphicsView_5.hide() else: self.graphicsView_5.show() def pause_all(self): self.timer1.stop() self.timer2.stop() self.timer3.stop() self.timer4.stop() self.timer5.stop() def resume_all(self): self.timer1.start() self.timer2.start() self.timer3.start() self.timer4.start() self.timer5.start() def clear_all(self): self.graphicsView.clear() self.graphicsView_2.clear() self.graphicsView_3.clear() self.graphicsView_4.clear() self.graphicsView_5.clear() self.pause_all() def read_file1(self): self.fname1 = QtGui.QFileDialog.getOpenFileName( self, 'Open only txt or CSV or xls', os.getenv('HOME'), "csv(*.csv);; text(*.txt) ;; xls(*.xls)") path = self.fname1[0] #self.name1= self.fname1 if pathlib.Path(path).suffix == ".txt": self.data1 = np.genfromtxt(path, delimiter=',') self.x1 = self.data1[:, 0] self.y1 = self.data1[:, 1] self.x1 = list(self.x1[:]) self.y1 = list(self.y1[:]) elif pathlib.Path(path).suffix == ".csv": self.data1 = np.genfromtxt(path, delimiter=' ') self.x1 = self.data1[:, 0] self.y1 = self.data1[:, 1] self.x1 = list(self.x1[:]) self.y1 = list(self.y1[:]) elif pathlib.Path(path).suffix == ".xls": self.data1 = np.genfromtxt(path, delimiter=',') self.x1 = self.data1[:, 0] self.y1 = self.data1[:, 1] self.x1 = list(self.x1[:]) self.y1 = list(self.y1[:]) def read_file2(self): fname = QtGui.QFileDialog.getOpenFileName( self, 'Open only txt or CSV or xls', os.getenv('HOME'), "csv(*.csv);; text(*.txt) ;; xls(*.xls)") path = fname[0] if pathlib.Path(path).suffix == ".txt": self.data2 = np.genfromtxt(path, delimiter=',') self.x2 = self.data2[:, 0] self.y2 = self.data2[:, 1] self.x2 = list(self.x2[:]) self.y2 = list(self.y2[:]) elif pathlib.Path(path).suffix == ".csv": self.data2 = np.genfromtxt(path, delimiter=' ') self.x2 = self.data2[:, 0] self.y2 = self.data2[:, 1] self.x2 = list(self.x2[:]) self.y2 = list(self.y2[:]) elif pathlib.Path(path).suffix == ".xls": self.data2 = np.genfromtxt(path, delimiter=',') self.x2 = self.data2[:, 0] self.y2 = self.data2[:, 1] self.x2 = list(self.x2[:]) self.y2 = list(self.y2[:]) def read_file3(self): fname = QtGui.QFileDialog.getOpenFileName( self, 'Open only txt or CSV or xls', os.getenv('HOME'), "csv(*.csv);; text(*.txt) ;; xls(*.xls)") path = fname[0] if pathlib.Path(path).suffix == ".txt": self.data3 = np.genfromtxt(path, delimiter=',') self.x3 = self.data3[:, 0] self.y3 = self.data3[:, 1] self.x3 = list(self.x3[:]) self.y3 = list(self.y3[:]) elif pathlib.Path(path).suffix == ".csv": self.data3 = np.genfromtxt(path, delimiter=' ') self.x3 = self.data3[:, 0] self.y3 = self.data3[:, 1] self.x3 = list(self.x3[:]) self.y3 = list(self.y3[:]) elif pathlib.Path(path).suffix == ".xls": self.data3 = np.genfromtxt(path, delimiter=',') self.x3 = self.data3[:, 0] self.y3 = self.data3[:, 1] self.x3 = list(self.x3[:]) self.y3 = list(self.y3[:]) def read_file4(self): fname = QtGui.QFileDialog.getOpenFileName( self, 'Open only txt or CSV or xls', os.getenv('HOME'), "csv(*.csv);; text(*.txt) ;; xls(*.xls)") path = fname[0] if pathlib.Path(path).suffix == ".txt": self.data4 = np.genfromtxt(path, delimiter=',') self.x4 = self.data4[:, 0] self.y4 = self.data4[:, 1] self.x4 = list(self.x4[:]) self.y4 = list(self.y4[:]) elif pathlib.Path(path).suffix == ".csv": self.data4 = np.genfromtxt(path, delimiter=' ') self.x4 = self.data4[:, 0] self.y4 = self.data4[:, 1] self.x4 = list(self.x4[:]) self.y4 = list(self.y4[:]) elif pathlib.Path(path).suffix == ".xls": self.data4 = np.genfromtxt(path, delimiter=',') self.x4 = self.data4[:, 0] self.y4 = self.data4[:, 1] self.x4 = list(self.x4[:]) self.y4 = list(self.y4[:]) def read_file5(self): fname = QtGui.QFileDialog.getOpenFileName( self, 'Open only txt or CSV or xls', os.getenv('HOME'), "csv(*.csv);; text(*.txt) ;; xls(*.xls)") path = fname[0] if pathlib.Path(path).suffix == ".txt": self.data5 = np.genfromtxt(path, delimiter=',') self.x5 = self.data5[:, 0] self.y5 = self.data5[:, 1] self.x5 = list(self.x5[:]) self.y5 = list(self.y5[:]) elif pathlib.Path(path).suffix == ".csv": self.data5 = np.genfromtxt(path, delimiter=' ') self.x5 = self.data5[:, 0] self.y5 = self.data5[:, 1] self.x5 = list(self.x5[:]) self.y5 = list(self.y5[:]) elif pathlib.Path(path).suffix == ".xls": self.data5 = np.genfromtxt(path, delimiter=',') self.x5 = self.data5[:, 0] self.y5 = self.data5[:, 1] self.x5 = list(self.x5[:]) self.y5 = list(self.y5[:]) def load1(self): self.read_file1() self.pen = pg.mkPen(color=(255, 0, 0)) self.data_line1 = self.graphicsView.plot(self.x1, self.y1, pen=self.pen) self.graphicsView.plotItem.setLimits(xMin=0, xMax=12, yMin=-0.6, yMax=0.6) self.idx1 = 0 self.timer1.setInterval(100) self.timer1.timeout.connect(self.update_plot_data1) self.timer1.start() def load2(self): self.read_file2() self.pen = pg.mkPen(color=(0, 160, 0)) self.data_line2 = self.graphicsView_2.plot(self.x2, self.y2, pen=self.pen) self.graphicsView_2.plotItem.setLimits(xMin=0, xMax=12, yMin=-0.6, yMax=0.6) #self.graphicsView_2.plotItem.setXRange(0 , 0.5) #self.graphicsView.plotItem.enableAutoRange(enable=True) self.idx2 = 0 self.timer2.setInterval(60) self.timer2.timeout.connect(self.update_plot_data2) self.timer2.start() def load3(self): self.read_file3() self.pen = pg.mkPen(color=(255, 255, 0)) self.data_line3 = self.graphicsView_3.plot(self.x3, self.y3, pen=self.pen) self.graphicsView_3.plotItem.setLimits(xMin=0, xMax=12, yMin=-0.6, yMax=0.6) self.idx3 = 0 self.timer3.setInterval(20) self.timer3.timeout.connect(self.update_plot_data3) self.timer3.start() def load4(self): self.read_file4() self.pen = pg.mkPen(color=(0, 160, 255)) self.data_line4 = self.graphicsView_4.plot(self.x4, self.y4, pen=self.pen) self.graphicsView_4.plotItem.setLimits(xMin=0, xMax=12, yMin=-0.6, yMax=0.6) self.idx4 = 0 self.timer4.setInterval(20) self.timer4.timeout.connect(self.update_plot_data4) self.timer4.start() def load5(self): self.read_file5() self.pen = pg.mkPen(color=(0, 255, 255)) self.data_line5 = self.graphicsView_5.plot(self.x5, self.y5, pen=self.pen) self.graphicsView_5.plotItem.setLimits(xMin=0, xMax=12, yMin=-0.6, yMax=0.6) self.idx5 = 0 self.timer5.setInterval(20) self.timer5.timeout.connect(self.update_plot_data5) self.timer5.start() def update_plot_data1(self): x = self.x1[:self.idx1] y = self.y1[:self.idx1] self.idx1 += 10 if self.idx1 > len(self.x1): self.idx1 = 0 if self.x1[self.idx1] > 0.5: self.graphicsView.setLimits( xMin=min(x, default=0), xMax=max(x, default=0)) #disable paning over xlimits self.graphicsView.plotItem.setXRange( max(x, default=0) - 0.5, max(x, default=0)) self.data_line1.setData(x, y) def update_plot_data2(self): x = self.x2[:self.idx2] y = self.y2[:self.idx2] self.idx2 += 10 if self.idx2 > len(self.x2): self.idx2 = 0 if self.x2[self.idx2] > 0.5: self.graphicsView_2.setLimits( xMin=min(x, default=0), xMax=max(x, default=0)) #disable paning over xlimits self.graphicsView_2.plotItem.setXRange( max(x, default=0) - 0.5, max(x, default=0)) self.data_line2.setData(x, y) # Update the data. def update_plot_data3(self): x = self.x3[:self.idx3] y = self.y3[:self.idx3] self.data_line3.setData(x, y) # Update the data. self.idx3 += 10 if self.idx3 > len(self.x3): self.idx3 = 0 if self.x3[self.idx3] > 0.5: self.graphicsView_3.setLimits(xMin=min(x, default=0), xMax=max(x, default=0)) self.graphicsView_3.plotItem.setXRange( max(x, default=0) - 0.5, max(x, default=0)) def update_plot_data4(self): x = self.x4[:self.idx4] y = self.y4[:self.idx4] #self.y2.append( self.ytemp) #Add a new random value. self.data_line4.setData(x, y) # Update the data. self.idx4 += 10 if self.idx4 > len(self.x4): self.idx4 = 0 if self.x4[self.idx4] > 0.5: self.graphicsView_4.setLimits(xMin=min(x, default=0), xMax=max(x, default=0)) self.graphicsView_4.plotItem.setXRange( max(x, default=0) - 0.5, max(x, default=0)) def update_plot_data5(self): x = self.x5[:self.idx5] y = self.y5[:self.idx5] self.data_line5.setData(x, y) # Update the data. self.idx5 += 10 if self.idx5 > len(self.x5): self.idx5 = 0 if self.x5[self.idx5] > 0.5: self.graphicsView_5.setLimits( xMin=min(x, default=0), xMax=max(x, default=0)) #disable paning over xlimits self.graphicsView_5.plotItem.setXRange( max(x, default=0) - 0.5, max(x, default=0)) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "RRE Signal Viewer")) MainWindow.setWindowIcon(QtGui.QIcon('logo3.png')) self.resume.setText(_translate("MainWindow", "Resume")) self.pause.setText(_translate("MainWindow", "Pause")) self.clear.setText(_translate("MainWindow", "Clear")) self.show_ch1.setText(_translate("MainWindow", "Hide channel 1")) self.show_ch2.setText(_translate("MainWindow", "Hide channel 2")) self.show_cch3.setText(_translate("MainWindow", "Hide channel 3")) self.show_ch4.setText(_translate("MainWindow", "Hide channel 4")) self.show_ch5.setText(_translate("MainWindow", "Hide channel 5")) self.label.setText( _translate( "MainWindow", " To zoom drag the graph to the right" )) self.menuchannel_1.setTitle(_translate("MainWindow", "channel 1")) self.menuchannel_2.setTitle(_translate("MainWindow", "channel 2")) self.menuchannel_3.setTitle(_translate("MainWindow", "channel 3")) self.menuchannel_4.setTitle(_translate("MainWindow", "channel 4")) self.menuchannel_5.setTitle(_translate("MainWindow", "channel 5")) self.open_ch1.setText(_translate("MainWindow", "open with")) self.open_ch2.setText(_translate("MainWindow", "open with")) self.open_ch3.setText(_translate("MainWindow", "open with")) self.open_ch4.setText(_translate("MainWindow", "open with")) self.open_ch5.setText(_translate("MainWindow", "open with"))