Example #1
0
    def MyTime(self):
        vbox = QVBoxLayout()
        time = QTime()
        time.setHMS(13, 15, 40)
        timeedit = QTimeEdit()
        timeedit.setFont(QtGui.QFont("Sanserif", 15))
        timeedit.setTime(time)

        vbox.addWidget(timeedit)
        self.setLayout(vbox)
Example #2
0
    def my_time(self):
        vbox = QVBoxLayout()

        time = QtCore.QTime()
        time.setHMS(13, 15, 20)

        time_edit = QTimeEdit()
        time_edit.setFont(QtGui.QFont("Sanserif", 30))
        time_edit.setTime(time)

        vbox.addWidget(time_edit)
        self.setLayout(vbox)
Example #3
0
class TimerWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        # Инициализируем плеер и плейлист, на котором поставим цикличное воспроизведение
        self.playlist = QMediaPlaylist(self)
        self.playlist.setPlaybackMode(QMediaPlaylist.Loop)
        self.player = QMediaPlayer()
        # Создадим пустую ссылку, чтобы программа не крашилась, если пользователь не выберет мелодию
        self.url = QUrl()
        # Подскажем для чего кнопка
        self.lbl = QLabel('Выберите мелодию для таймера:', self)
        self.lbl.move(165, 100)
        # Кнопка для выбора файла с мелодией
        self.btn_getfile = QPushButton('Выбрать файл', self)
        self.btn_getfile.move(200, 125)
        self.btn_getfile.resize(100, 50)
        self.btn_getfile.clicked.connect(self.getfile)
        # Кнопка старта таймера
        self.btn_start = QPushButton('Старт', self)
        self.btn_start.move(225, 225)
        self.btn_start.resize(50, 50)
        self.btn_start.clicked.connect(self.start_timer)
        # Кнопка остановки таймера до того, как он закончит отсчет
        self.btn_stop = QPushButton('Стоп', self)
        self.btn_stop.move(250, 225)
        self.btn_stop.resize(50, 50)
        self.btn_stop.clicked.connect(self.stop_timer)
        self.btn_stop.setVisible(False)
        # Кнопка паузы таймера
        self.btn_pause = QPushButton('Пауза', self)
        self.btn_pause.move(200, 225)
        self.btn_pause.resize(50, 50)
        self.btn_pause.clicked.connect(self.pause_timer)
        self.btn_pause.setVisible(False)
        # Кнопка для продолжения отсчета таймера
        self.btn_continue = QPushButton('Дальше', self)
        self.btn_continue.move(200, 225)
        self.btn_continue.resize(50, 50)
        self.btn_continue.clicked.connect(self.continue_timer)
        self.btn_continue.setVisible(False)
        # Кнопка для выключения таймера, когда он закончит отсчет
        self.btn_off = QPushButton('Выкл', self)
        self.btn_off.move(225, 225)
        self.btn_off.resize(50, 50)
        self.btn_off.clicked.connect(self.timer_off)
        self.btn_off.setVisible(False)
        # Спрашивваем значение таймера
        self.get_timer = QTimeEdit(self)
        self.get_timer.move(185, 175)
        self.get_timer.resize(130, 50)
        self.get_timer.setFont(QFont('Times', 15, QFont.Bold))
        self.get_timer.setDisplayFormat('HH:mm:ss')
        # Дисплей для вывода таймера
        self.dsp = QLCDNumber(self)
        self.dsp.resize(200, 50)
        self.dsp.move(150, 175)
        self.dsp.setVisible(False)
        self.dsp.setDigitCount(8)
        # Таймер
        self.nTimer = QTimer()
        self.nTimer.timeout.connect(self.timer)

    def initUI(self):
        self.setGeometry(100, 100, 500, 500)
        self.setWindowTitle('Таймер')

    def start_timer(self):
        # Добавляем мелодию в плеер
        self.content = QMediaContent(self.url)
        self.playlist.addMedia(self.content)
        self.player.setPlaylist(self.playlist)
        # Выводим начальное значение времени на дисплей
        self.dsp.display(self.get_timer.time().toString('hh:mm:ss'))
        # Переводим время в секунды
        timer = self.get_timer.time()
        timer_text = timer.toString('hh:mm:ss')
        timer_int = list(map(lambda x: int(x), timer_text.split(':')))
        self.timer_in_sec = timer_int[0]*3600 + timer_int[1]*60 + timer_int[2]
        # Проверяем не установили ли нулевое значение
        if self.timer_in_sec == 0:
            self.timer_timeout()
        else:
            # Запускаем таймер
            self.nTimer.start(1000)
            # Махинации с показом кнопок
            self.btn_start.setVisible(False)
            self.btn_pause.setVisible(True)
            self.btn_stop.setVisible(True)
            self.dsp.setVisible(True)
            self.get_timer.setVisible(False)
            self.lbl.setVisible(False)
            self.btn_getfile.setVisible(False)

    def timer(self):
        # Функция обновления таймера и дисплея со временем
        # Делаем обратный отсчет, отнимая каждую секунду единицу из начального значения
        self.timer_in_sec -= 1
        # Переводим целочисленные значения в строку
        timer_text = list(map(lambda x: str(x), [self.timer_in_sec // 3600,
                                                 (self.timer_in_sec % 3600) // 60,
                                                 (self.timer_in_sec % 3600) % 60]))
        # Если один символ, то к нему добавляется ноль
        if len(timer_text[0]) == 1:
            timer_text[0] = '0' + timer_text[0]
        if len(timer_text[1]) == 1:
            timer_text[1] = '0' + timer_text[1]
        if len(timer_text[2]) == 1:
            timer_text[2] = '0' + timer_text[2]
        # Объединяем список в формат hh:mm:ss
        timer_text = ':'.join(timer_text)
        # Выводим текст со временем на дисплей
        self.dsp.display(timer_text)
        # Если таймер дошел до нуля:
        if self.timer_in_sec == 0:
            self.timer_timeout()
        else:
            # Обновляем таймер
            self.nTimer.start(1000)

    def stop_timer(self):
        # Останавливаем таймер
        self.nTimer.stop()
        # Махинации с кнопками
        self.btn_start.setVisible(True)
        self.btn_stop.setVisible(False)
        self.btn_pause.setVisible(False)
        self.dsp.setVisible(False)
        self.btn_continue.setVisible(False)
        self.get_timer.setVisible(True)
        self.btn_getfile.setVisible(True)
        self.lbl.setVisible(True)

    def continue_timer(self):
        # Продолжаем таймер с того места, где остановились
        self.nTimer.start(self.inter)
        # Махинации с показом кнопок
        self.btn_continue.setVisible(False)
        self.btn_pause.setVisible(True)

    def pause_timer(self):
        # Ловим оставшееся время таймера
        self.inter = self.nTimer.remainingTime()
        # Останавливаем таймер и делаем махинации с показом кнопок
        self.nTimer.stop()
        self.btn_pause.setVisible(False)
        self.btn_continue.setVisible(True)

    def timer_off(self):
        # Махинации с кнопками
        self.btn_start.setVisible(True)
        self.dsp.setVisible(False)
        self.get_timer.setVisible(True)
        self.btn_off.setVisible(False)
        self.btn_getfile.setVisible(True)
        self.lbl.setVisible(True)
        # Останавливаем мелодию
        self.player.stop()

    def timer_timeout(self):
        # Останавливаем таймер
        self.nTimer.stop()
        # Махинации с кнопками
        self.get_timer.setVisible(False)
        self.btn_stop.setVisible(False)
        self.btn_pause.setVisible(False)
        self.btn_continue.setVisible(False)
        self.btn_off.setVisible(True)
        self.dsp.setVisible(True)
        self.lbl.setVisible(False)
        self.btn_getfile.setVisible(False)
        # Запускаем функцию воспроизведения мелодии
        self.playmus()

    def playmus(self):
        # Воспроизводим мелодию
        self.player.play()

    def getfile(self):
        # Достаем файл с мелодией и сохраняем её путь
        fname = QFileDialog.getOpenFileName(self, 'Open File', '/home', 'Audio Files (*mp3 *wav)')
        self.url = QUrl.fromLocalFile(fname[0])
Example #4
0
class MainWindow(PageWindow):
    def __init__(self, dir):
        super().__init__()
        global temp_global
        self.storage = firebase.screening()

        try:
            self.ser = serial.Serial(port='COM3',
                                     baudrate=115200,
                                     bytesize=8,
                                     parity='N',
                                     stopbits=1)
        except Exception as ex:
            template = ''
            message = template.format(type(ex).__name__, ex.args)
            print(message)
        self.dirname = dir

        self.seperator_vertical = QVSeperationLine()
        self.seperator_horizontal = QHSeperationLine()
        self.initUI()

        self.setWindowTitle("MainWindow")
        self.overlay = Overlay(self.centralWidget())
        self.available_cameras = QCameraInfo.availableCameras()
        if not self.available_cameras:
            pass  #quit
        self.select_camera(0)

    def initUI(self):
        self.homeUI()

    def homeUI(self):
        self.preview_widget = QWidget()
        self.footer_widget = QWidget()
        self.grid_widget = QWidget()
        self.graph_widget = QWidget()
        self.home = True
        self.viewfinder = QCameraViewfinder()
        self.viewfinder.show()
        self.setCentralWidget(self.viewfinder)
        self.cap = None  #  -capture <-> +cap
        self.horizontalLayout = QHBoxLayout()
        self.horizontalLayout2 = QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout = QVBoxLayout()
        self.chartLayout = QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.image_label = QLabel()
        self.image_label.setText("")
        self.image_label.setObjectName("image_label")
        self.image_label.setStyleSheet("QLabel { margin-right:4px;  }")

        self.temp = QLabel()
        self.temp.setText("TEMPERATURE : ")
        self.temp.setObjectName("temp")
        self.temp.setFont(QFont("Gadugi", 20, weight=QFont.Bold))
        #self.temp.setAlignment(QtCore.Qt.AlignCenter)
        self.temp_reading = QLabel()
        self.temp_reading.setText("READING...")
        self.temp_reading.setObjectName("temp_reading")
        self.temp_reading.setFont(QFont("Gadugi", 20, weight=QFont.Bold))
        #self.temp_reading.setAlignment(QtCore.Qt.AlignCenter)

        self.temp2 = QLabel()
        self.temp2.setText("ROOM READING : ")
        self.temp2.setFont(QFont("Gadugi", 15, weight=QFont.Bold))
        self.temp2.setObjectName("temp2")
        #self.temp2.setAlignment(QtCore.Qt.AlignCenter)

        self.temp2_reading = QLabel()
        self.temp2_reading.setText("READING...")
        self.temp2_reading.setFont(QFont("Gadugi", 15, weight=QFont.Bold))
        #self.temp2_reading.setAlignment(QtCore.Qt.AlignCenter)
        self.temp2_reading.setObjectName("temp2_reading")

        self.image_label.setScaledContents(True)

        self.matplotlibWidget = MatplotlibWidget(self)
        self.threadSample = ThreadSample(self)
        self.threadSample.newSample.connect(self.on_threadSample_newSample)
        self.threadSample.finished.connect(self.on_threadSample_finished)

        self.gridLayout = QGridLayout(self)
        self.gridLayout.addWidget(self.temp, 0, 0, 1, 1)
        self.gridLayout.addWidget(self.temp_reading, 0, 1, 1, 3)
        # self.gridLayout.addWidget(self.temp2,2,0,1,1)
        # self.gridLayout.addWidget(self.temp2_reading,2,1,1,3)
        self.clock(self.gridLayout, 2, 0, 1, 3)

        self.grid_widget.setLayout(self.gridLayout)
        self.grid_widget.setMinimumHeight(250)
        self.grid_widget.setMaximumHeight(250)
        self.grid_widget.setMinimumWidth(600)
        self.grid_widget.setMaximumWidth(600)

        self.horizontalLayout.addWidget(self.image_label)
        #self.horizontalLayout.addWidget(self.seperator_vertical)
        self.horizontalLayout.addWidget(self.graph_widget)

        self.preview_widget.setLayout(self.horizontalLayout)
        self.preview_widget.setMinimumHeight(200)
        self.preview_widget.setMaximumHeight(200)
        self.preview_widget.setMinimumWidth(600)
        self.preview_widget.setMaximumWidth(600)

        # self.chartLayout.addWidget(self.matplotlibWidget)
        # self.graph_widget.setLayout(self.chartLayout)
        self.graph_widget.setMinimumHeight(250)
        self.graph_widget.setMaximumHeight(250)
        self.graph_widget.setMinimumWidth(250)
        self.graph_widget.setMaximumWidth(250)

        self.horizontalLayout2.addWidget(self.grid_widget)
        #         self.horizontalLayout2.addWidget(self.seperator_vertical)
        #self.horizontalLayout2.addWidget(self.clock)
        #self.clock(self.horizontalLayout2)

        self.footer_widget.setLayout(self.horizontalLayout2)
        self.footer_widget.setMinimumHeight(250)
        self.footer_widget.setMaximumHeight(250)
        self.footer_widget.setMinimumWidth(600)
        self.footer_widget.setMaximumWidth(600)

        self.verticalLayout.addWidget(self.preview_widget)
        self.verticalLayout.addWidget(self.seperator_horizontal)
        self.verticalLayout.addWidget(self.footer_widget)
        #self.verticalLayout.addWidget(self.image_label2)

        self.timer = QTimer(self, interval=5)
        self.timer.timeout.connect(self.update_frame)
        self._image_counter = 0
        centralWidget = QWidget(self)
        self.setCentralWidget(centralWidget)
        self.centralWidget().setLayout(self.verticalLayout)
        self.start_webcam()
        self.update_frame()
        #         self.setCentralWidget(self.scroll)
        self.setGeometry(300, 300, 400, 700)
        thread = Thread(target=self.read_temp)
        thread.daemon = True
        thread.start()

    def select_camera(self, i):
        self.camera = QCamera(self.available_cameras[i])
        self.camera.setViewfinder(self.viewfinder)
        self.camera.setCaptureMode(QCamera.CaptureStillImage)
        self.camera.error.connect(
            lambda: self.alert(self.camera.errorString()))
        self.camera.start()

        self.capture = QCameraImageCapture(self.camera)
        self.capture.error.connect(lambda i, e, s: self.alert(s))
        self.capture.imageCaptured.connect(lambda d, i: self.statusmessage(
            "Image %04d captured" % self.save_seq))

        self.current_camera_name = self.available_cameras[i].description()
        self.save_seq = 0

    def read_temp(self):
        temp = []
        while True:
            self.ser.write(b'0x55,0xAA,5,1,4')
            response = self.ser.readline()
            print(str(response))
            if 'body' in str(response):
                temp.append(str(response))
                #print("temp-"+str(response))
                #print(temp)
            elif 'Vbat' in str(response):
                if len(temp) != 0:

                    temp[1] = temp[1].replace('b\'T body =', '')
                    temp[1] = temp[1].replace("\\r\\n'", '')
                    temp[0] = temp[0].replace('b\'T body =', '')
                    temp[0] = temp[0].replace("compensate\\r\\n'", '')
                    self.findFaces('-'.join(temp))
                    self.update_label(temp[0], temp[1], '12')
                temp = []
                time.sleep(1)

        # start = time.clock()
        # while True:
        # if True:
        #     if True:
        #         temp.append(str(random.randint(0,100)))
        #         temp.append(str(random.randint(0,100)))
        #         self.overlay.show()
        #         # self.findFaces('-'.join(temp))
        #         self.update_label(temp[0],temp[1],'12')
        #         self.overlay.hide()

        #         print("Done-"+ ' '.join(temp))

        #     temp = []
        #     time.sleep(1)

    def statusmessage(self, msg):
        self.statusBar().showMessage(msg)

    def update_label(self, temp1, temp2, time):
        print(temp1)
        global temp_global
        temp2 = self.getTemp(str(temp2))
        temp1 = self.getTemp(str(temp1))
        unit = " °C"
        constraint_1 = 36.1
        constraint_2 = 37.2
        if temp_global == 1:
            unit = " °F"
            constraint_1 = 97
            constraint_2 = 99
            temp2 = ((temp2 * (9 / 5)) + 32)

        if temp2 >= constraint_1 and temp2 <= constraint_2:
            pal = self.temp_reading.palette()
            pal.setColor(QPalette.WindowText, QColor("green"))
            self.temp_reading.setPalette(pal)
        else:
            pal = self.temp_reading.palette()
            pal.setColor(QPalette.WindowText, QColor("red"))
            self.temp_reading.setPalette(pal)

#         if temp2>=36.1 and temp2<=37.2:
#             pal = self.temp_reading.palette()
#             pal.setColor(QPalette.WindowText, QColor("black"))
#             self.temp2_reading.setPalette(pal)
#         else:
#             pal = self.temp_reading.palette()
#             pal.setColor(QPalette.WindowText, QColor("black"))
#             self.temp2_reading.setPalette(pal)

        self.temp_reading.setText(str(temp2) + unit)

        self.temp2_reading.setText(str(temp1) + unit)
        #self.temp2_reading.setColor(QPalette.WindowText, QtGui.QColor("red"))

    def getTemp(self, inp):
        temp = re.findall(r"[-+]?\d*\.\d+|\d+", inp)
        temp = ''.join(temp)
        if temp == '':
            return 0
        else:
            return round(float(temp), 1)

    def filter(self, text):

        text = text.replace('bTbody', 'body')
        text = text.replace('\'', '')

        text = text.replace('\\r\n\'b\'Tbody', '-')
        text = text.replace('\\r', '')
        text = text.replace('\r', '')
        text = text.replace('\\xa8', '')
        text = text.replace('\\xa1\\xe6', '')
        text = text.replace('\\n', '-')
        text = text.replace(' ', '')
        text = text.replace(', ', ',')
        text = text.replace('=', '_')
        text = text.replace(',', '-')
        return text

    def alert(self, s):
        """
        Handle errors coming from QCamera dn QCameraImageCapture by displaying alerts.
        """
        err = QErrorMessage(self)
        err.showMessage(s)

    @QtCore.pyqtSlot()
    def start_webcam(self):
        if self.cap is None:
            self.cap = cv2.VideoCapture(0)
            self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
            self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
        self.timer.start()

    def start_cam(self):
        self.cap.open(0)

    def stop_webcam(self):
        self.cap.release()

    def closeEvent(self, event):
        print("closing PyQtTest")
        self.cap.close()

    @QtCore.pyqtSlot()
    def update_frame(self):
        if self.cap.isOpened():
            ret, image = self.cap.read()
            #self.face_detect(image,file_name)
            simage = cv2.flip(image, 1)
            self.displayImage(image, True)

    def findFaces(self, file_name):
        face_detect = True
        while face_detect:
            if self.cap.isOpened():
                ret, frame = self.cap.read()
                face_locations = fl(frame)

                print("I found {} face(s) in this photograph.".format(
                    len(face_locations)))
                #self.statusmessage("I found {} face(s) in this photograph.".format(len(face_locations)))
                for face_location in face_locations:
                    face_detect = False
                    # Print the location of each face in this image
                    top, right, bottom, left = face_location
                    print(
                        "A face is located at pixel location Top: {}, Left: {}, Bottom: {}, Right: {}"
                        .format(top, left, bottom, right))
                    # ts = time.time()
                    # You can access the actual face itself like this:
                    face_image = frame[top - 100:bottom + 100,
                                       left - 100:right + 100]
                    ts = datetime.now().strftime('%Y_%m_%d-%H_%M_%S')
                    cv2.imwrite(
                        os.path.abspath(
                            os.path.join(self.dirname,
                                         (ts + '-' + file_name + '.jpg'))),
                        face_image)
                    self.storage.upload(self.dirname,
                                        (ts + '-' + file_name + '.jpg'))

    def face_detect(self, file_name):

        face_locations = []
        face_encodings = []
        face_names = []
        process_this_frame = True
        i = 0
        face_detect = True
        # Resize frame of video to 1/4 size for faster face recognition processing
        while face_detect:
            ret, frame = self.cap.read()
            #self.face_detect(image,file_name)
            #simage     = cv2.flip(image, 1)
            small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)

            # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
            rgb_small_frame = small_frame[:, :, ::-1]

            # Only process every other frame of video to save time
            if process_this_frame:
                # Find all the faces and face encodings in the current frame of video
                face_locations = face_recognition.face_locations(
                    rgb_small_frame)
                face_encodings = face_recognition.face_encodings(
                    rgb_small_frame, face_locations)

                face_names = []
                for face_encoding in face_encodings:
                    # See if the face is a match for the known face(s)
                    face_detect = False
                    name = "Unknown"
                    cv2.imwrite(
                        os.path.abspath(
                            os.path.join(
                                self.dirname,
                                (datetime.today().strftime('%Y-%m-%d') + '-' +
                                 file_name + '-' + str(++i) + '.png'))), frame)
                    #self.storage.upload(self.dirname,(datetime.today().strftime('%Y-%m-%d')+'-'+file_name+'-'+str(i)+'.png'))

                    i = i + 1

                    print("I see someone named {}!".format(name))
                    # # If a match was found in known_face_encodings, just use the first one.
                    # if True in matches:
                    #     first_match_index = matches.index(True)
                    #     name = known_face_names[first_match_index]

                    # Or instead, use the known face with the smallest distance to the new face

                    process_this_frame = not process_this_frame

    @QtCore.pyqtSlot()
    def capture_image(self):
        if self.cap.isOpened():
            flag, frame = self.cap.read()
            timestamp = time.strftime("%d-%b-%Y-%H_%M_%S")

            self.save_seq += 1

            path = self.dirname  #
            if flag:
                QtWidgets.QApplication.beep()
                name = "my_image.jpg"
                cv2.imwrite(
                    os.path.join(
                        self.dirname, "%s-%04d-%s.jpg" %
                        (self.current_camera_name, self.save_seq, timestamp)),
                    frame)
                self.alert('Image Store Successfully.')
                self._image_counter += 1

    def displayImage(self, img, window=True):
        qformat = QImage.Format_Indexed8
        if len(img.shape) == 3:
            if img.shape[2] == 4:
                qformat = QImage.Format_RGBA8888
            else:
                qformat = QImage.Format_RGB888
        outImage = QImage(img, img.shape[1], img.shape[0], img.strides[0],
                          qformat)
        outImage = outImage.rgbSwapped()
        if window:
            self.image_label.setStyleSheet("""
        QLabel {
            height:300px !important;
            
            }
        """)

            self.image_label.setPixmap(QPixmap.fromImage(outImage))

    def clock(self, layout, row, col, row_span, col_span):
        self.verticalLayoutClock = QVBoxLayout(self)
        self.dateEdit = QDateEdit(self)
        self.dateEdit.setDisplayFormat("MMM dd yyyy")
        self.dateEdit.setFont(QFont("Gadugi", 18, weight=QFont.Bold))
        self.dateEdit.setDisabled(True)
        self.verticalLayoutClock.addWidget(self.dateEdit)
        self.timeEdit = QTimeEdit(self)
        self.timeEdit.setFont(QFont("Gadugi", 18, weight=QFont.Bold))
        self.timeEdit.setDisplayFormat("hh:mm:ss AP")
        self.timeEdit.setDisabled(True)
        self.verticalLayoutClock.addWidget(self.timeEdit)
        self.updateTime()
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.updateTime)
        self.timer.start(1000)
        layout.addLayout(self.verticalLayoutClock, row, col, row_span,
                         col_span)

    @QtCore.pyqtSlot(list)
    def on_threadSample_newSample(self, sample):
        self.matplotlibWidget.axis.plot(sample)
        self.matplotlibWidget.canvas.draw()

    @QtCore.pyqtSlot()
    def on_threadSample_finished(self):
        self.samples += 1
        if self.samples <= 2:
            self.threadSample.start()

    @QtCore.pyqtSlot()
    def on_pushButtonPlot_clicked(self):
        self.samples = 0
        self.matplotlibWidget.axis.clear()
        self.threadSample.start()

    def updateTime(self):
        current = QtCore.QDateTime.currentDateTime()
        self.dateEdit.setDate(current.date())
        self.timeEdit.setTime(current.time())
Example #5
0
class AlarmWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        # Флаг, чтобы функция вызова будильника не вызвыалась с каждым тиком
        self.flag_get_up = True
        # Нулевое время для сброса часов
        self.zero_time = QTime(0, 0)
        # Пустая ссылка
        self.url = QUrl()
        # Инициализируем плеер и плейлист, который после зацикливаем
        self.playlist = QMediaPlaylist(self)
        self.playlist.setPlaybackMode(QMediaPlaylist.Loop)
        self.player = QMediaPlayer()
        # Кнопка для выбора файла с музыкой
        self.btn_getfile = QPushButton('Выбрать файл', self)
        self.btn_getfile.setFont(QFont('Times', 10))
        self.btn_getfile.move(142.5, 25)
        self.btn_getfile.resize(215, 50)
        self.btn_getfile.setVisible(False)
        self.btn_getfile.clicked.connect(self.getfile)
        # Радио-кнопка для включения будильника
        self.radio_btn1 = QRadioButton('вкл', self)
        self.radio_btn1.move(0, 15)
        self.radio_btn1.setFont(QFont('Times', 10))
        self.radio_btn1.toggled.connect(self.on_off)
        # Радио-кнопка для выключения будильника
        self.radio_btn2 = QRadioButton('выкл', self)
        self.radio_btn2.move(0, 40)
        self.radio_btn2.setChecked(True)
        self.radio_btn2.setFont(QFont('Times', 10))
        self.radio_btn2.toggled.connect(self.on_off)
        # Значение будильника
        self.timer_edit = QTimeEdit(self)
        self.timer_edit.setDisplayFormat('hh:mm')
        self.timer_edit.move(200, 110)
        self.timer_edit.resize(100, 50)
        self.timer_edit.setFont(QFont('Times', 18, QFont.Bold))
        self.timer_edit.setVisible(False)
        # Бирка
        self.lbl = QLabel('Будильник:', self)
        self.lbl.move(0, 0)
        self.lbl.setFont(QFont('Times', 10))
        # Подсказка для кнопки выбора мелодии
        self.lbl2 = QLabel('Выберите мелодию для будильника:', self)
        self.lbl2.move(142.5, 0)
        self.lbl2.setVisible(False)
        self.lbl2.setFont(QFont('Times', 10))
        # Бирка
        self.lbl3 = QLabel('Будильник установлен на:', self)
        self.lbl3.move(175, 185)
        self.lbl3.setFont(QFont('Times', 10))
        self.lbl3.setVisible(False)
        # Бирка
        self.lbl4 = QLabel('Установите время будильника:', self)
        self.lbl4.move(150, 85)
        self.lbl4.setFont(QFont('Times', 10))
        self.lbl4.setVisible(False)
        # Кнопка выключения будильника, когда он сработает
        self.btn = QPushButton('Выключить\nбудильник', self)
        self.btn.clicked.connect(self.awake)
        self.btn.resize(100, 100)
        self.btn.move(200, 200)
        self.btn.setFont(QFont('Times', 11, QFont.ExtraBold))
        self.btn.setVisible(False)
        # Дисплей для вывода значения будильника
        self.dis2 = QLCDNumber(self)
        self.dis2.move(200, 210)
        self.dis2.resize(100, 50)
        self.dis2.setVisible(False)
        # Дисплей с текущим временем
        self.dis1 = QLCDNumber(self)
        self.dis1.move(375, 25)
        self.dis1.resize(100, 50)
        # Бирка
        self.lbl5 = QLabel('Сейчас:', self)
        self.lbl5.move(375, 0)
        self.lbl5.setFont(QFont('Times', 10))
        # Таймер
        self.nTimer = QTimer()
        self.nTimer.timeout.connect(self.repeatTime)
        self.nTimer.start()

    def initUI(self):
        self.setGeometry(100, 100, 500, 500)
        self.setWindowTitle('Будильник')

    def repeatTime(self):
        # Вытаскиваем системное время и преобразуем в строку
        self.time = QTime().currentTime()
        time_text = self.time.toString('hh:mm')
        # Вытаскиваем выставленное значение будильника и преобразуем в строку
        timer = self.timer_edit.time()
        timer_text = timer.toString('hh:mm')
        # Выводим значения будильника на дисплей
        self.dis2.display(timer_text)
        # Выводим текущее время
        self.dis1.display(time_text)
        # Проверяем условия срабатывания будильника
        if timer_text == time_text and self.flag_get_up and self.radio_btn1.isChecked(
        ):
            self.flag_get_up = False
            self.get_up()
        else:
            self.flag_get_up = True

    def awake(self):
        # Устанавливаем нулевое значение времени будильника
        self.timer_edit.setTime(self.zero_time)
        # Махинация с показом виджетов
        self.lbl.setVisible(True)
        self.lbl2.setVisible(True)
        self.lbl3.setVisible(True)
        self.lbl4.setVisible(True)
        self.radio_btn1.setVisible(True)
        self.radio_btn2.setVisible(True)
        self.btn_getfile.setVisible(True)
        self.dis2.setVisible(True)
        self.timer_edit.setVisible(True)
        self.btn.setVisible(False)
        # Останавливаем музыку
        self.player.stop()

    def get_up(self):
        # Махинации с показом виджетов
        self.lbl.setVisible(False)
        self.lbl2.setVisible(False)
        self.lbl3.setVisible(False)
        self.lbl4.setVisible(False)
        self.radio_btn1.setVisible(False)
        self.radio_btn2.setVisible(False)
        self.btn_getfile.setVisible(False)
        self.dis2.setVisible(False)
        self.timer_edit.setVisible(False)
        self.btn.setVisible(True)
        # Включаем музыку
        self.player.play()

    def getfile(self):
        # Достаем файл с мелодией и сохраняем её путь
        fname = QFileDialog.getOpenFileName(self, 'Open File', '/home',
                                            'Audio Files (*mp3 *wav)')
        self.url = QUrl.fromLocalFile(fname[0])
        # Устанавливаем музыку в плеер
        self.content = QMediaContent(self.url)
        self.playlist.clear()
        self.playlist.addMedia(self.content)
        self.player.setPlaylist(self.playlist)

    def on_off(self):
        # Включаем/выключаем будильник
        if self.radio_btn1.isChecked():
            self.btn_getfile.setVisible(True)
            self.timer_edit.setVisible(True)
            self.dis2.setVisible(True)
            self.lbl2.setVisible(True)
            self.lbl3.setVisible(True)
            self.lbl4.setVisible(True)
        else:
            self.btn_getfile.setVisible(False)
            self.timer_edit.setVisible(False)
            self.dis2.setVisible(False)
            self.lbl2.setVisible(False)
            self.lbl3.setVisible(False)
            self.lbl4.setVisible(False)
            self.timer_edit.setTime(self.zero_time)
            self.btn.setVisible(False)
            self.player.stop()
Example #6
0
class WindowOption(QWidget):
    def __init__(self):
        super(WindowOption, self).__init__()
        self.initUI()

    def initUI(self):
        """# Global """
        self.setWindowTitle('Option')
        self.setFixedSize(800, 450)

        self.list_option = QListWidget(self)
        self.stack_window = QStackedWidget(self)

        self.style_list_option = "QListWidget{\
                                min-width: 120px;\
                                max-width: 120px;\
                                color: white;\
                                background: grey;}"

        self.style_groupbox = "QGroupBox{\
                               border: None;}"

        self.style_groupbox_font = "QGroupBox{\
                                    font-family: MonoxRegular;\
                                    font-size: 20px;}"

        layout_main = QHBoxLayout(spacing=0)
        layout_main.setContentsMargins(0, 0, 0, 0)

        layout_main.addWidget(self.list_option)
        layout_main.addWidget(self.stack_window)
        self.setLayout(layout_main)

        self.list_option.setStyleSheet(self.style_list_option)
        """# List Option"""
        self.list_option.setFrameShape(QListWidget.NoFrame)
        self.list_option.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.list_option.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

        self.list_option.currentRowChanged.connect(
            self.stack_window.setCurrentIndex)

        font = QFont()
        font.setFamily('MonoxLight')
        font.setPointSize(20)

        item = QListWidgetItem()
        item.setFont(font)
        item.setText('DIY')
        item.setSizeHint(QSize(0, 60))
        item.setTextAlignment(Qt.AlignCenter)
        self.list_option.addItem(item)

        item = QListWidgetItem()
        item.setFont(font)
        item.setText('PRO')
        item.setSizeHint(QSize(0, 60))
        item.setTextAlignment(Qt.AlignCenter)
        self.list_option.addItem(item)

        self.page0_pre()
        self.page0tab0()
        self.page0tab1()
        self.page0global()
        self.page1_pre()
        self.page1tab0()
        self.page1tab1()
        self.page1global()

    def keyReleaseEvent(self, event):
        """DocString for pressKeyEwent"""
        #@todo: to be defined.
        if event.key() == Qt.Key_D:
            self.list_option.setCurrentRow(0)
            self.stack_window.setCurrentIndex(0)

        if event.key() == Qt.Key_P:
            self.list_option.setCurrentRow(1)
            self.stack_window.setCurrentIndex(1)

        if event.key() == Qt.Key_O:
            if self.stack_window.currentIndex() == 1:
                self.tabwidget_page1.setCurrentIndex(1)
            else:
                self.tabwidget_page0.setCurrentIndex(1)

        if event.key() == Qt.Key_I:
            if self.stack_window.currentIndex() == 1:
                self.tabwidget_page1.setCurrentIndex(0)
            else:
                self.tabwidget_page0.setCurrentIndex(0)

        if event.key() == Qt.Key_Return:
            if self.stack_window.currentIndex() == 1:
                self.pushbutton_ok_page1.click()
            else:
                self.pushbutton_ok_page0.click()

        if event.key() == Qt.Key_R:
            if self.stack_window.currentIndex() == 1:
                self.pushbutton_re_page1.click()
            else:
                self.pushbutton_re_page0.click()

        if event.key() == Qt.Key_Q:
            self.close()

    def page0_pre(self):
        """DocString for page0"""
        #@todo: to be defined.
        font = QFont()
        font.setFamily('MonoxLight')
        font.setPointSize(12)

        self.page0 = QWidget()

        self.tabwidget_page0 = QTabWidget(self.page0)

        self.tab0_page0 = QWidget(self.page0)
        self.tab1_page0 = QWidget(self.page0)

        self.tabwidget_page0.addTab(self.tab0_page0, 'Info')
        self.tabwidget_page0.addTab(self.tab1_page0, 'Option')

    def page0tab0(self):
        """DocString for page0tab0"""
        #@todo: to be defined.

        font = QFont()
        font.setFamily('MonoxLight')
        font.setPointSize(12)

        label_date_page0 = QLabel('Date      ')
        label_date_page0.setFont(font)

        label_time_page0 = QLabel('Time      ')
        label_time_page0.setFont(font)

        label_loc_page0 = QLabel('Location  ')
        label_loc_page0.setFont(font)

        label_users_name_page0 = QLabel('Name     ')
        label_users_name_page0.setFont(font)

        font_spe = QFont()
        font_spe.setFamily('MonoxRegular Bold')
        font_spe.setPointSize(12)
        label_users_gender_page0 = QLabel('Gender')
        label_users_gender_page0.setFont(font_spe)

        label_note_page0 = QLabel('Note')
        label_note_page0.setFont(font)

        self.dateedit_date_page0 = QDateEdit(QDate.currentDate())
        self.dateedit_date_page0.setDisplayFormat('yyyy/MM/dd')
        self.dateedit_date_page0.setCalendarPopup(True)
        self.dateedit_date_page0.setFont(font)
        self.timeedit_time_page0 = QTimeEdit(QTime.currentTime())
        self.timeedit_time_page0.setDisplayFormat('HH : mm')
        self.timeedit_time_page0.setFont(font)
        self.lineedit_loc_page0 = QLineEdit('Mars')
        self.lineedit_loc_page0.setFont(font)
        self.lineedit_users_name_page0 = QLineEdit('Object')
        self.lineedit_users_name_page0.setFont(font)

        self.radiobutton_users_gender_male_page0 = QRadioButton('Male')
        self.radiobutton_users_gender_female_page0 = QRadioButton('Female')
        self.radiobutton_users_gender_secret_page0 = QRadioButton('Secret')

        self.textedit_note_page0 = QTextEdit('None')
        self.textedit_note_page0.setFont(font)

        line_split_page0 = QFrame()
        line_split_page0.setFrameShape(QFrame.VLine)
        line_split_page0.setFrameShadow(QFrame.Sunken)

        groupbox_radio_button = QGroupBox()
        groupbox_radio_button.setStyleSheet(self.style_groupbox)

        layout_groupbox_radio_button = QHBoxLayout()
        layout_groupbox_radio_button.addWidget(
            self.radiobutton_users_gender_male_page0)
        layout_groupbox_radio_button.addWidget(
            self.radiobutton_users_gender_female_page0)
        layout_groupbox_radio_button.addWidget(
            self.radiobutton_users_gender_secret_page0)
        groupbox_radio_button.setLayout(layout_groupbox_radio_button)

        layout_tab0_page0_global = QVBoxLayout(self.tab0_page0)

        layout_info_page0 = QHBoxLayout()
        layout_note_page0 = QVBoxLayout()

        layout_time_page0 = QVBoxLayout()
        layout_user_page0 = QVBoxLayout()

        layout_date_page0 = QHBoxLayout()
        layout_date_page0.setAlignment(Qt.AlignLeft)
        layout_clock_page0 = QHBoxLayout()
        layout_clock_page0.setAlignment(Qt.AlignLeft)
        layout_loc_page0 = QHBoxLayout()
        layout_loc_page0.setAlignment(Qt.AlignLeft)
        layout_name_page0 = QHBoxLayout()
        layout_gender_page0 = QVBoxLayout()

        layout_date_page0.addWidget(label_date_page0)
        layout_date_page0.addWidget(self.dateedit_date_page0)
        layout_clock_page0.addWidget(label_time_page0)
        layout_clock_page0.addWidget(self.timeedit_time_page0)
        layout_loc_page0.addWidget(label_loc_page0)
        layout_loc_page0.addWidget(self.lineedit_loc_page0)
        layout_name_page0.addWidget(label_users_name_page0)
        layout_name_page0.addWidget(self.lineedit_users_name_page0)
        layout_gender_page0.addWidget(label_users_gender_page0)
        layout_gender_page0.addWidget(groupbox_radio_button)

        layout_time_page0.addLayout(layout_date_page0)
        layout_time_page0.addLayout(layout_clock_page0)
        layout_time_page0.addLayout(layout_loc_page0)
        layout_user_page0.addLayout(layout_name_page0)
        layout_user_page0.addLayout(layout_gender_page0)

        layout_info_page0.addLayout(layout_time_page0)
        layout_info_page0.addWidget(line_split_page0)
        layout_info_page0.addLayout(layout_user_page0)

        layout_note_page0.addWidget(label_note_page0)
        layout_note_page0.addWidget(self.textedit_note_page0)

        layout_tab0_page0_global.addLayout(layout_info_page0)
        layout_tab0_page0_global.addLayout(layout_note_page0)

        self.tab0_page0.setLayout(layout_tab0_page0_global)

    def page0tab1(self):
        """DocString for page0tab1"""
        #@todo: to be defined.
        font = QFont()
        font.setFamily('MonoxLight')
        font.setPointSize(12)

        layout_tab1_page0_global = QVBoxLayout()
        groupbox_text_style = 'QGroupBox{\
                               max-height: 60px;\
                               }'

        groupbox_info_style = 'QGroupBox{\
                               min-height: 120px;\
                               font-family: MonoxRegular;\
                               font-size: 20px;\
                               }'

        groupbox_radio_button = QGroupBox('Option')
        layout_groupbox_radio_button = QHBoxLayout()
        self.radiobutton_test1 = QRadioButton('TEST1')
        self.radiobutton_test2 = QRadioButton('TEST2')

        layout_groupbox_radio_button.addWidget(self.radiobutton_test1)
        layout_groupbox_radio_button.addWidget(self.radiobutton_test2)
        groupbox_radio_button.setLayout(layout_groupbox_radio_button)
        groupbox_radio_button.setStyleSheet(groupbox_text_style)

        layout_info_text = QVBoxLayout()
        groupbox_text_info = QGroupBox('Info')
        self.text_edit_info = QTextEdit()
        groupbox_text_info.setStyleSheet(groupbox_info_style)
        groupbox_text_info.setFont(font)
        layout_info_text.addWidget(groupbox_text_info)

        layout_group_text_info = QHBoxLayout(groupbox_text_info)
        layout_group_text_info.addWidget(self.text_edit_info)

        groupbox_tcpip_page1 = QGroupBox('TCP/IP')
        groupbox_tcpip_page1.setStyleSheet(self.style_groupbox_font)

        label_tcp_address = QLabel('TCP Address')
        label_tcp_address.setFont(font)

        label_tcp_port = QLabel('TCP Port')
        label_tcp_port.setFont(font)
        self.lineedit_tcp_address_page0 = QLineEdit()
        self.lineedit_tcp_port_page0 = QLineEdit()
        self.lineedit_tcp_address_page0.setFont(font)
        self.lineedit_tcp_port_page0.setFont(font)

        layout_tcpip_page1_global = QVBoxLayout()
        layout_tcpip_data = QHBoxLayout()
        layout_tcpip_button_reset = QHBoxLayout()

        layout_tcpip_data.addWidget(label_tcp_address)
        layout_tcpip_data.addWidget(self.lineedit_tcp_address_page0)
        layout_tcpip_data.addWidget(label_tcp_port)
        layout_tcpip_data.addWidget(self.lineedit_tcp_port_page0)

        layout_tcpip_page1_global.addLayout(layout_tcpip_data)

        layout_tab1_page0_global.addWidget(groupbox_radio_button)
        layout_tab1_page0_global.addLayout(layout_info_text)
        layout_tab1_page0_global.addLayout(layout_tcpip_page1_global)

        self.tab1_page0.setLayout(layout_tab1_page0_global)

    def page0global(self):
        """DocString for page0global"""
        #@todo: to be defined.
        self.pushbutton_ok_page0 = QPushButton('&Ok')
        self.pushbutton_re_page0 = QPushButton('&Reset')
        self.pushbutton_de_page0 = QPushButton('&Cancel')

        layout_page0_option = QHBoxLayout()
        layout_page0_option.addStretch(1)
        layout_page0_option.addWidget(self.pushbutton_ok_page0)
        layout_page0_option.addWidget(self.pushbutton_re_page0)
        layout_page0_option.addWidget(self.pushbutton_de_page0)

        layout_page0_global = QVBoxLayout(self.page0)
        layout_page0_global.addWidget(self.tabwidget_page0)
        layout_page0_global.addLayout(layout_page0_option)

        self.stack_window.addWidget(self.page0)

    def page1_pre(self):
        self.page1 = QWidget()

        self.tabwidget_page1 = QTabWidget(self.page1)

        self.tab0_page1 = QWidget(self.page1)
        self.tab1_page1 = QWidget(self.page1)

        self.tabwidget_page1.addTab(self.tab0_page1, 'Info')
        self.tabwidget_page1.addTab(self.tab1_page1, 'Option')

    def page1tab0(self):
        """DocString for page1tab0"""
        #@todo: to be defined.

        font = QFont()
        font.setFamily('MonoxLight')
        font.setPointSize(12)

        label_date_page1 = QLabel('Date      ')
        label_date_page1.setFont(font)

        label_time_page1 = QLabel('Time      ')
        label_time_page1.setFont(font)

        label_loc_page1 = QLabel('Location  ')
        label_loc_page1.setFont(font)

        label_users_name_page1 = QLabel('Name     ')
        label_users_name_page1.setFont(font)

        label_users_gender_page1 = QLabel('Gender')
        label_users_gender_page1.setFont(font)

        label_note_page1 = QLabel('Note')
        label_note_page1.setFont(font)

        line_split_page1 = QFrame()
        line_split_page1.setFrameShape(QFrame.VLine)
        line_split_page1.setFrameShadow(QFrame.Sunken)

        self.dateedit_date_page1 = QDateEdit(QDate.currentDate())
        self.dateedit_date_page1.setDisplayFormat('yyyy/MM/dd')
        self.dateedit_date_page1.setCalendarPopup(True)
        self.dateedit_date_page1.setFont(font)
        self.timeedit_time_page1 = QTimeEdit(QTime.currentTime())
        self.timeedit_time_page1.setDisplayFormat('HH : mm')
        self.timeedit_time_page1.setFont(font)
        self.lineedit_loc_page1 = QLineEdit('Mars')
        self.lineedit_loc_page1.setFont(font)
        self.lineedit_users_name_page1 = QLineEdit('Object')
        self.lineedit_users_name_page1.setFont(font)

        self.radiobutton_users_gender_male_page1 = QRadioButton('Male')
        self.radiobutton_users_gender_female_page1 = QRadioButton('Female')
        self.radiobutton_users_gender_secret_page1 = QRadioButton('Secret')

        self.textedit_note_page1 = QTextEdit('None')
        self.textedit_note_page1.setFont(font)

        groupbox_radio_button = QGroupBox()
        groupbox_radio_button.setStyleSheet(self.style_groupbox)

        layout_groupbox_radio_button = QHBoxLayout()
        layout_groupbox_radio_button.addWidget(
            self.radiobutton_users_gender_male_page1)
        layout_groupbox_radio_button.addWidget(
            self.radiobutton_users_gender_female_page1)
        layout_groupbox_radio_button.addWidget(
            self.radiobutton_users_gender_secret_page1)
        groupbox_radio_button.setLayout(layout_groupbox_radio_button)

        layout_tab0_page1_global = QVBoxLayout(self.tab0_page1)

        layout_info_page1 = QHBoxLayout()
        layout_note_page1 = QVBoxLayout()

        layout_time_page1 = QVBoxLayout()
        layout_user_page1 = QVBoxLayout()

        layout_date_page1 = QHBoxLayout()
        layout_date_page1.setAlignment(Qt.AlignLeft)
        layout_clock_page1 = QHBoxLayout()
        layout_clock_page1.setAlignment(Qt.AlignLeft)
        layout_loc_page1 = QHBoxLayout()
        layout_loc_page1.setAlignment(Qt.AlignLeft)
        layout_name_page1 = QHBoxLayout()
        layout_gender_page1 = QVBoxLayout()

        layout_date_page1.addWidget(label_date_page1)
        layout_date_page1.addWidget(self.dateedit_date_page1)
        layout_clock_page1.addWidget(label_time_page1)
        layout_clock_page1.addWidget(self.timeedit_time_page1)
        layout_loc_page1.addWidget(label_loc_page1)
        layout_loc_page1.addWidget(self.lineedit_loc_page1)
        layout_name_page1.addWidget(label_users_name_page1)
        layout_name_page1.addWidget(self.lineedit_users_name_page1)
        layout_gender_page1.addWidget(label_users_gender_page1)
        layout_gender_page1.addWidget(groupbox_radio_button)

        layout_time_page1.addLayout(layout_date_page1)
        layout_time_page1.addLayout(layout_clock_page1)
        layout_time_page1.addLayout(layout_loc_page1)
        layout_user_page1.addLayout(layout_name_page1)
        layout_user_page1.addLayout(layout_gender_page1)

        layout_info_page1.addLayout(layout_time_page1)
        layout_info_page1.addWidget(line_split_page1)
        layout_info_page1.addLayout(layout_user_page1)

        layout_note_page1.addWidget(label_note_page1)
        layout_note_page1.addWidget(self.textedit_note_page1)

        layout_tab0_page1_global.addLayout(layout_info_page1)
        layout_tab0_page1_global.addLayout(layout_note_page1)

        self.tab0_page1.setLayout(layout_tab0_page1_global)

    def page1tab1(self):
        """DocString for page1tab1"""
        #@todo: to be defined.

        font = QFont()
        font.setFamily('MonoxLight')
        font.setPointSize(12)

        label_filter_or_not = QLabel('Filter')
        label_filter_or_not.setFont(font)

        label_filter_hz1 = QLabel('Hz')
        label_filter_hz1.setFont(font)
        label_filter_hz2 = QLabel('Hz')
        label_filter_hz2.setFont(font)
        label_filter_hz3 = QLabel('Hz')
        label_filter_hz3.setFont(font)
        label_filter_hz4 = QLabel('Hz')
        label_filter_hz4.setFont(font)

        label_sampling_freq = QLabel('Sampling Frequency')
        label_sampling_freq.setFont(font)

        label_notch_filter = QLabel('Notch Filter')
        label_notch_filter.setFont(font)

        label_bandpass_filter = QLabel('Bandpass Filter')
        label_bandpass_filter.setFont(font)

        label_bandpass_filter_to = QLabel('to')
        label_bandpass_filter_to.setFont(font)

        label_set_num = QLabel('Set Number')
        label_set_num.setFont(font)

        label_set_time = QLabel('Set Time')
        label_set_time.setFont(font)

        label_set_interval = QLabel('Auto Restart')
        label_set_interval.setFont(font)

        label_set_interval_s = QLabel('s')
        label_set_interval_s.setFont(font)

        label_tcp_address = QLabel('TCP Address')
        label_tcp_address.setFont(font)

        label_tcp_port = QLabel('TCP Port')
        label_tcp_port.setFont(font)

        label_filetype_save = QLabel('Filetype')
        label_filetype_save.setFont(font)

        label_channel_num = QLabel('Channel Number')
        label_channel_num.setFont(font)

        self.spinbox_set_num = QSpinBox()
        self.spinbox_set_time = QSpinBox()

        self.combobox_bandpass_high = QComboBox()
        self.combobox_bandpass_high.addItem('1')
        self.combobox_bandpass_high.addItem('5')
        self.combobox_bandpass_high.addItem('10')
        self.combobox_bandpass_high.addItem('20')

        self.combobox_bandpass_low = QComboBox()
        self.combobox_bandpass_low.addItem('50')
        self.combobox_bandpass_low.addItem('100')
        self.combobox_bandpass_low.addItem('200')
        self.combobox_bandpass_low.addItem('450')

        self.combobox_sampling_freq = QComboBox()
        self.combobox_sampling_freq.addItem('250')
        self.combobox_sampling_freq.addItem('500')
        self.combobox_sampling_freq.addItem('1000')
        self.combobox_sampling_freq.addItem('2000')

        self.combobox_notch_filter = QComboBox()
        self.combobox_notch_filter.addItem('50')
        self.combobox_notch_filter.addItem('60')

        self.combobox_filetype_save = QComboBox()
        self.combobox_filetype_save.addItem('csv')
        self.combobox_filetype_save.addItem('npy')

        self.combobox_channel_num = QComboBox()
        self.combobox_channel_num.addItem('64')
        self.combobox_channel_num.addItem('128')
        self.combobox_channel_num.addItem('192')

        self.lineedit_tcp_address_page1 = QLineEdit()
        self.lineedit_tcp_address_page1.setFont(font)

        self.lineedit_tcp_port_page1 = QLineEdit()
        self.lineedit_tcp_port_page1.setFont(font)

        self.checkbox_notch_filter = QCheckBox('Notch Filter')
        self.checkbox_bandpass_filter = QCheckBox('Bandpass Filter')

        self.radiobutton_restart_auto = QRadioButton('Auto Restart')
        self.radiobutton_restart_press = QRadioButton('Manual Restart')

        self.spinbox_restart_auto = QSpinBox()

        groupbox_filter_page1 = QGroupBox('Filter')
        groupbox_filter_page1.setStyleSheet(self.style_groupbox_font)
        groupbox_data_page1 = QGroupBox('Data')
        groupbox_data_page1.setStyleSheet(self.style_groupbox_font)
        groupbox_tcpip_page1 = QGroupBox('TCP/IP')
        groupbox_tcpip_page1.setStyleSheet(self.style_groupbox_font)

        layout_filter_or_not = QHBoxLayout()
        layout_filter_notch = QHBoxLayout()
        layout_filter_bandpass = QHBoxLayout()
        layout_sampling_freq = QHBoxLayout()
        layout_button_filter_reset = QHBoxLayout()

        layout_filter_or_not.addWidget(label_filter_or_not)
        layout_filter_or_not.addWidget(self.checkbox_notch_filter)
        layout_filter_or_not.addWidget(self.checkbox_bandpass_filter)

        layout_filter_notch.addWidget(label_notch_filter)
        layout_filter_notch.addWidget(self.combobox_notch_filter)
        layout_filter_notch.addWidget(label_filter_hz1)

        layout_filter_bandpass.addWidget(label_bandpass_filter)
        layout_filter_bandpass.addWidget(self.combobox_bandpass_high)
        layout_filter_bandpass.addWidget(label_filter_hz2)
        layout_filter_bandpass.addWidget(label_bandpass_filter_to)
        layout_filter_bandpass.addWidget(self.combobox_bandpass_low)
        layout_filter_bandpass.addWidget(label_filter_hz3)

        layout_sampling_freq.addWidget(label_sampling_freq)
        layout_sampling_freq.addWidget(self.combobox_sampling_freq)
        layout_sampling_freq.addWidget(label_filter_hz4)

        layout_data_channel_num = QHBoxLayout()
        layout_data_set = QHBoxLayout()
        layout_data_interval = QVBoxLayout()
        layout_data_filetype = QHBoxLayout()
        layout_button_data_reset = QHBoxLayout()

        layout_data_channel_num.addWidget(label_channel_num)
        layout_data_channel_num.addWidget(self.combobox_channel_num)
        layout_data_interval_auto = QHBoxLayout()
        layout_data_interval_press = QHBoxLayout()
        layout_data_interval_auto.addWidget(self.radiobutton_restart_auto)
        layout_data_interval_auto.addWidget(self.spinbox_restart_auto)
        layout_data_interval_auto.addWidget(label_set_interval_s)
        layout_data_interval_press.addWidget(self.radiobutton_restart_press)

        layout_data_interval.addLayout(layout_data_interval_auto)
        layout_data_interval.addLayout(layout_data_interval_press)

        layout_data_set.addWidget(label_set_num)
        layout_data_set.addWidget(self.spinbox_set_num)
        layout_data_set.addWidget(label_set_time)
        layout_data_set.addWidget(self.spinbox_set_time)

        layout_data_filetype.addWidget(label_filetype_save)
        layout_data_filetype.addWidget(self.combobox_filetype_save)

        layout_filter_page1 = QVBoxLayout()
        layout_filter_page1.addLayout(layout_filter_or_not)
        layout_filter_page1.addLayout(layout_filter_notch)
        layout_filter_page1.addLayout(layout_filter_bandpass)
        layout_filter_page1.addLayout(layout_sampling_freq)

        layout_data_page1 = QVBoxLayout()
        layout_data_page1.addLayout(layout_data_channel_num)
        layout_data_page1.addLayout(layout_data_set)
        layout_data_page1.addLayout(layout_data_interval)
        layout_data_page1.addLayout(layout_data_filetype)

        layout_tcpip_page1_global = QVBoxLayout()
        layout_tcpip_data = QHBoxLayout()
        layout_tcpip_button_reset = QHBoxLayout()

        layout_tcpip_data.addWidget(label_tcp_address)
        layout_tcpip_data.addWidget(self.lineedit_tcp_address_page1)
        layout_tcpip_data.addWidget(label_tcp_port)
        layout_tcpip_data.addWidget(self.lineedit_tcp_port_page1)

        layout_tcpip_page1_global.addLayout(layout_tcpip_data)

        groupbox_filter_page1.setLayout(layout_filter_page1)
        groupbox_data_page1.setLayout(layout_data_page1)
        groupbox_tcpip_page1.setLayout(layout_tcpip_page1_global)

        layout_tab1_page1_up = QHBoxLayout()
        layout_tab1_page1_down = QHBoxLayout()

        layout_tab1_page1_up.addWidget(groupbox_filter_page1)
        layout_tab1_page1_up.addWidget(groupbox_data_page1)
        layout_tab1_page1_down.addWidget(groupbox_tcpip_page1)

        layout_tab1_page1_global = QVBoxLayout()
        layout_tab1_page1_global.addLayout(layout_tab1_page1_up)
        layout_tab1_page1_global.addLayout(layout_tab1_page1_down)

        self.tab1_page1.setLayout(layout_tab1_page1_global)

    def page1global(self):
        """DocString for page1global"""
        #@todo: to be defined.

        self.pushbutton_ok_page1 = QPushButton('&Ok')
        self.pushbutton_de_page1 = QPushButton('&Cancel')
        self.pushbutton_re_page1 = QPushButton('&Reset')

        layout_page1_option = QHBoxLayout()
        layout_page1_option.addStretch(1)
        layout_page1_option.addWidget(self.pushbutton_ok_page1)
        layout_page1_option.addWidget(self.pushbutton_re_page1)
        layout_page1_option.addWidget(self.pushbutton_de_page1)

        layout_page1_global = QVBoxLayout()
        layout_page1_global.addWidget(self.tabwidget_page1)
        layout_page1_global.addLayout(layout_page1_option)

        self.page1.setLayout(layout_page1_global)

        self.stack_window.addWidget(self.page1)
Example #7
0
class TimeSynchronizer(QDialog):
    """Time synchronization widget.

    Make this widget look all big and important, but really, it's just an indirect way of getting
    a reference clock time (the more straightforward way being to just enter one in the text input).

    However, this widget comes in most useful when synchronizing the reference clock with race
    officials. When they press start, we press start/hit enter on this widget. We then use that
    moment in time as our reference clock time.
    """

    TIME_POINT_SIZE = 24
    BUTTON_POINT_SIZE = 54

    def __init__(self, parent=None):
        """Initialize the TimeSynchronizer instance."""
        super().__init__(parent=parent)

        self.instruction_label = QLabel('Adjust desired synchronization time and press '
                                        '"Sync" button to set reference clock time.')
        self.instruction_label.setWordWrap(True)

        self.time_timeedit = QTimeEdit()
        self.time_timeedit.setDisplayFormat(defaults.DATETIME_FORMAT)
        font = self.time_timeedit.font()
        font.setPointSize(self.TIME_POINT_SIZE)
        self.time_timeedit.setFont(font)

        self.sync_button = QPushButton('Sync')
        font = self.sync_button.font()
        font.setPointSize(self.BUTTON_POINT_SIZE)
        self.sync_button.setFont(font)

        self.setLayout(QVBoxLayout())
        self.layout().addWidget(self.instruction_label)
        self.layout().addWidget(self.time_timeedit)
        self.layout().addWidget(self.sync_button)

        self.sync_button.clicked.connect(self.handle_clicked)

    def show(self):
        """Show the TimeSynchronizer.

        Initialize the time to zero.
        """
        self.read_settings()
        self.time_timeedit.setTime(QTime(0, 0))
        super().show()

    def hide(self):
        """Save geometry settings."""
        super().hide()
        self.write_settings()

    def handle_clicked(self):
        """Handler for sync button click."""
        reference_time = self.time_timeedit.time()
        current_time = QTime.currentTime()
        reference_clock_time = current_time.addMSecs(-reference_time.msecsSinceStartOfDay())

        self.clicked.emit(reference_clock_time)

    def read_settings(self):
        """Read settings."""
        group_name = self.__class__.__name__
        settings = QSettings()
        settings.beginGroup(group_name)

        if settings.contains('pos'):
            self.move(settings.value('pos'))

        settings.endGroup()

    def write_settings(self):
        """Write settings."""
        group_name = self.__class__.__name__
        settings = QSettings()
        settings.beginGroup(group_name)

        settings.setValue('pos', self.pos())

        settings.endGroup()

    clicked = pyqtSignal(QTime)