Ejemplo n.º 1
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])
Ejemplo n.º 2
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()
Ejemplo n.º 3
0
class timer(QMainWindow):
    def __init__(self):
        super(timer, self).__init__()
        self.initial_variables()  #zd
        self.init_ui()
        self.show()

    def init_ui(self):
        self.time = QTimer(self)
        self.time.setInterval(1000)
        self.time.timeout.connect(self.refresh)
        self.time.timeout.connect(self.skip_day)  #zd

        self.time_start_up = QTime(0, 0, 0)  #正计时的开始时间
        self.time_start_fall = QTime(23, 59, 59)  #倒计时结束时分秒
        self.time_start_data = QDate.currentDate()  #倒计时结束年月日

        self.time_system = QTimer(self)
        self.time_system.setInterval(1000)
        self.time_system.timeout.connect(self.refresh_system)
        self.time_system.start()

        self.hour = 0  #暂停前已经记录的时分秒
        self.minute = 0
        self.second = 0
        self.interval = 0

        self.time.start()

        self.init_window()
        self.init_lcd()
        self.init_Button()
        self.init_bar()
        self.init_label()

    def init_window(self):
        self.resize(900, 600)
        self.setWindowTitle('觅时')
        self.setWindowIcon(QIcon('./images/others/icon.png'))
        self.image_file = "./images/background/timg.png"
        mixer.init()
        self.sound = mixer.music.load(
            "./sound/Berliner Philharmoniker.mp3")  #默认背景音乐
        mixer.music.play(-1, 0.0)

    def init_bar(self):
        self.statusBar()
        menubar = self.menuBar()
        menubar.setNativeMenuBar(False)
        background_menu = menubar.addMenu('背景图片')
        sound_menu = menubar.addMenu('背景音乐')
        model_menu = menubar.addMenu('窗口模式')

        self.open_picture_action = QAction('本地图片', self)
        background_menu.addAction(self.open_picture_action)
        self.open_picture_action.triggered.connect(self.open_picture)

        self.open_music_action = QAction('本地音乐', self)
        self.stop_music_action = QAction('音乐暂停', self)
        self.continue_music_action = QAction('音乐继续', self)
        self.start_music_action = QAction('从头播放', self)
        sound_menu.addAction(self.open_music_action)
        sound_menu.addAction(self.stop_music_action)
        sound_menu.addAction(self.continue_music_action)
        sound_menu.addAction(self.start_music_action)
        self.open_music_action.triggered.connect(self.open_music)
        self.stop_music_action.triggered.connect(self.stop_music)
        self.continue_music_action.triggered.connect(self.continue_music)
        self.start_music_action.triggered.connect(self.start_music)

        self.float_action = QAction('悬浮窗', self)
        self.normal_action = QAction('正常窗口', self)
        model_menu.addAction(self.float_action)
        model_menu.addAction(self.normal_action)
        self.float_action.triggered.connect(self.float)
        self.normal_action.triggered.connect(self.normal)

    def open_picture(self):
        #选择本地图片
        self.image_file, _ = QFileDialog.getOpenFileName(
            self, 'Open file', './images/background',
            'Image files (*.jpg *.gif *.png *.jpeg)')
        self.setAutoFillBackground(True)
        if path.exists(self.image_file) == False:
            return
        palette = QPalette()
        palette.setBrush(
            QPalette.Background,
            QBrush(
                QPixmap(self.image_file).scaled(self.size(),
                                                Qt.IgnoreAspectRatio,
                                                Qt.SmoothTransformation)))
        self.setPalette(palette)

    def open_music(self):
        #选择本地音乐
        self.music_file, _ = QFileDialog.getOpenFileName(
            self, 'Open file', './sound', 'Image files (*.mp3 *.wan *.midi)')
        if path.exists(self.music_file) == False:
            return
        mixer.init()
        self.sound = mixer.music.load(self.music_file)
        mixer.music.play(-1, 0.0)

    def stop_music(self):
        #音乐暂停
        mixer.music.pause()

    def continue_music(self):
        #音乐继续
        mixer.music.unpause()

    def start_music(self):
        #音乐从头开始
        mixer.music.play()

    def init_lcd(self):
        #正计时LCD
        self.lcd1 = QLCDNumber(self)
        self.lcd1.setStyleSheet("background: transparent;font-size:50000px")
        self.lcd1.setObjectName("lcd1")
        self.lcd1.setDigitCount(12)
        self.lcd1.setMode(QLCDNumber.Dec)
        self.lcd1.setSegmentStyle(QLCDNumber.Flat)
        self.lcd1.setVisible(True)

        #倒计时LCD
        self.lcd2 = QLCDNumber(self)
        self.lcd2.setStyleSheet("background: transparent;font-size:50000px")
        self.lcd2.setObjectName("lcd2")
        self.lcd2.setDigitCount(12)
        self.lcd2.setMode(QLCDNumber.Dec)
        self.lcd2.setSegmentStyle(QLCDNumber.Flat)
        self.lcd2.setVisible(False)

        #系统时间LCD
        self.lcd3 = QLCDNumber(self)
        self.lcd3.setStyleSheet(
            "background: transparent;font-size:50000px;color:rgb(255,255,255)")
        self.lcd3.setObjectName("lcd3")
        self.lcd3.setDigitCount(12)
        self.lcd3.setMode(QLCDNumber.Dec)
        self.lcd3.setSegmentStyle(QLCDNumber.Flat)

    def init_label(self):
        #显示标签
        self.label = QLabel("", self)
        self.label.setVisible(True)
        self.label.setFixedWidth(500)
        self.label.setFixedHeight(100)
        self.setStyleSheet(
            "QLabel{font-size:30px;font-weight:normal;font-family:Arial;}")
        self.label.setGeometry(QRect(300, 100, 20, 11))

    def float(self):
        #进入悬浮窗
        self.hide()
        self.resize(550, 60)
        # self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint)
        self.lcd3.setVisible(False)
        self.splider.setVisible(False)
        self.label.setVisible(False)
        #self.setWindowFlags(Qt.WindowMaximizeButtonHint)
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)

        self.setAutoFillBackground(True)
        palette = QPalette()
        palette.setBrush(
            QPalette.Background,
            QBrush(
                QPixmap(self.image_file).scaled(self.size(),
                                                Qt.IgnoreAspectRatio,
                                                Qt.SmoothTransformation)))
        self.setPalette(palette)

        self.show()
        self.showNormal()

    def normal(self):
        #退出悬浮窗
        self.hide()
        self.resize(900, 500)
        screen = QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move((screen.width() - size.width()) / 2,
                  (screen.height() - size.height()) / 3)
        self.setWindowFlags(Qt.Widget)
        self.lcd3.setVisible(True)
        self.splider.setVisible(True)
        self.label.setVisible(True)
        self.show()

    def resizeEvent(self, *args, **kwargs):
        width = self.width()
        height = self.height()
        self.lcd1.setGeometry(
            QRect((width - 300) / 2, (height - 111) / 2, 300, 111))
        self.lcd2.setGeometry(
            QRect((width - 300) / 2, (height - 111) / 2, 300, 111))
        self.lcd3.setGeometry(QRect(width - 200, height - 100, 200, 111))
        self.label.setGeometry(QRect((width - 75) / 2, height / 2, 300, 111))

        self.setAutoFillBackground(True)
        palette = QPalette()
        palette.setBrush(
            QPalette.Background,
            QBrush(
                QPixmap(self.image_file).scaled(self.size(),
                                                Qt.IgnoreAspectRatio,
                                                Qt.SmoothTransformation)))
        self.setPalette(palette)

    def init_Button(self):
        #开始结束按钮
        self.state_start_end = 0
        self.pushButton = QPushButton()
        self.pushButton.setStyleSheet("background:transparent;")
        self.pushButton.setText("")
        icon = QIcon()
        icon.addPixmap(QPixmap(":/start/start.png"))
        self.pushButton.setIcon(icon)
        self.pushButton.setIconSize(QSize(30, 30))
        self.pushButton.setCheckable(True)
        self.pushButton.setFlat(True)
        self.pushButton.setObjectName("开始/结束")
        self.pushButton.clicked.connect(self.start_end)

        #暂停继续按钮
        self.state_continue_stop = 0
        self.pushButton_2 = QPushButton()
        self.pushButton_2.setStyleSheet("background:transparent;")
        self.pushButton_2.setText("")
        icon1 = QIcon()
        icon1.addPixmap(QPixmap(":/on/stop.png"))
        self.pushButton_2.setIcon(icon1)
        self.pushButton_2.setIconSize(QSize(30, 30))
        self.pushButton_2.setCheckable(True)
        self.pushButton_2.setFlat(True)
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_2.clicked.connect(self.continue_stop)

        #数据分析按钮
        self.toolButton = QToolButton()
        self.toolButton.setLayoutDirection(Qt.LeftToRight)
        self.toolButton.setStyleSheet("background:transparent;")
        icon2 = QIcon()
        icon2.addPixmap(QPixmap(":/analytics/analytics.png"), QIcon.Normal,
                        QIcon.Off)
        self.toolButton.setIcon(icon2)
        self.toolButton.setIconSize(QSize(30, 30))
        self.toolButton.setAutoRaise(True)
        self.toolButton.setObjectName("toolButton")
        self.toolButton.clicked.connect(self.analyze)

        #声音播放静音按钮
        self.sound_state = 0
        self.pushButton_4 = QPushButton()
        self.pushButton_4.setStyleSheet("background:transparent;")
        self.pushButton_4.setText("")
        icon3 = QIcon()
        icon3.addPixmap(QPixmap(":/sound/sound.png"), QIcon.Normal, QIcon.Off)
        icon3.addPixmap(QPixmap(":/sound_off/Sound_off.png"), QIcon.Normal,
                        QIcon.On)
        self.pushButton_4.setIcon(icon3)
        self.pushButton_4.setIconSize(QSize(30, 30))
        self.pushButton_4.setCheckable(True)
        self.pushButton_4.setFlat(True)
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_4.clicked.connect(self.sound_renew)
        #self.pushButton_4.rclicked.connect(self.sound_renew())

        #声音大小调节按钮
        self.splider = QSlider(Qt.Horizontal)
        self.splider.valueChanged.connect(self.valChange)
        self.splider.setMinimum(0)
        self.splider.setMaximum(100)
        self.splider.setSingleStep(1)
        self.splider.setTickInterval(1)
        self.splider.setValue(100)

        #布局
        hbox = QHBoxLayout()
        vbox = QVBoxLayout()
        hbox.addWidget(self.pushButton)
        hbox.addWidget(self.pushButton_2)
        hbox.addWidget(self.toolButton)
        hbox.addWidget(self.pushButton_4)
        hbox.addWidget(self.splider)
        hbox.addStretch(1)
        vbox.addStretch(1)
        vbox.addLayout(hbox)
        main_frame = QWidget()
        main_frame.setLayout(vbox)
        self.setCentralWidget(main_frame)

    def refresh(self):
        #正计时
        self.startDate_up = QDateTime(
            QDate.currentDate(),
            self.time_start_up).toMSecsSinceEpoch()  #显示正计时
        self.endDate_up = QDateTime.currentMSecsSinceEpoch()
        interval_up = self.endDate_up - self.startDate_up + self.interval
        if interval_up > 0:
            hour = interval_up // (60 * 60 * 1000)
            min = (interval_up - hour * 60 * 60 * 1000) // (60 * 1000)
            sec = (interval_up - hour * 60 * 60 * 1000 -
                   min * 60 * 1000) // 1000
            intervals = '0' * (2 - len(str(hour))) + str(
                hour) + ':' + '0' * (2 - len(str(min))) + str(
                    min) + ':' + '0' * (2 - len(str(sec))) + str(sec)
            self.lcd1.display(intervals)

        #倒计时
        self.startDate_fall = QDateTime.currentMSecsSinceEpoch()  #显示倒计时
        self.endDate_fall = QDateTime(
            self.time_start_data, self.time_start_fall).toMSecsSinceEpoch()
        interval_fall = self.endDate_fall - self.startDate_fall - self.interval
        if interval_fall > 0:
            hour = interval_fall // (60 * 60 * 1000)
            min = (interval_fall - hour * 60 * 60 * 1000) // (60 * 1000)
            sec = (interval_fall - hour * 60 * 60 * 1000 -
                   min * 60 * 1000) // 1000
            intervals = '0' * (2 - len(str(hour))) + str(
                hour) + ':' + '0' * (2 - len(str(min))) + str(
                    min) + ':' + '0' * (2 - len(str(sec))) + str(sec)
            self.lcd2.display(intervals)
            if hour == 0 and min == 0 and sec == 0:
                mixer.init()
                self.sound = mixer.music.load(
                    "./sound/My Soul,Your Beats!.mp3")
                mixer.music.play(-1, 0.0)

    def refresh_system(self):
        hour = QTime.currentTime().hour()  #显示系统时间
        min = QTime.currentTime().minute()
        sec = QTime.currentTime().second()
        intervals = '0' * (2 - len(str(hour))) + str(
            hour) + ':' + '0' * (2 - len(str(min))) + str(
                min) + ':' + '0' * (2 - len(str(sec))) + str(sec)
        self.lcd3.display(intervals)

    def sound_renew(self):
        #背景音乐状态按钮
        #if self.pushButton_4 == Qt.LeftButton:
        if self.sound_state == 0:
            self.sound_state = 1
            mixer.music.set_volume(0.0)
            self.splider.setValue(0)
            self.splider.setEnabled(False)

        else:
            self.sound_state = 0
            mixer.music.set_volume(1.0)
            self.splider.setValue(100)
            self.splider.setEnabled(True)

    def valChange(self):
        #设置音量为滑动条音量
        mixer.music.set_volume(self.splider.value() / 100)

    def start_end(self):
        time_1 = QTimer(self)
        time_1.setInterval(1)
        time_1.timeout.connect(self.state_refresh)
        time_1.start()

        if self.state_start_end % 2 == 0:
            #任务开始
            self.state_continue_stop = 1
            self.statis = statistic()
            self.interval = 0
            self.time.start()

        if self.state_start_end % 2 == 1:
            #任务结束
            self.check = "无"
            text, ok = QInputDialog.getText(self, '任务备注', '任务备注')
            if ok:
                now_end = QDate.currentDate()
                print(now_end.toString(Qt.DefaultLocaleLongDate))  #结束时的年月日
                time_end = QTime.currentTime()
                print(time_end.toString(Qt.DefaultLocaleLongDate))  #结束时的时分秒
                self.new_check = QLabel(text)
                self.check = self.new_check.text()
                print('任务备注=%s' % self.check)  #title

                self.set_end(time_end.toString(Qt.DefaultLocaleLongDate),
                             self.check)  #zd

                icon = QIcon()
                icon.addPixmap(QPixmap(":/start/start.png"))
                self.pushButton.setIcon(icon)
                icon1 = QIcon()
                icon1.addPixmap(QPixmap(":/on/stop.png"))
                self.pushButton_2.setIcon(icon1)

                if self.statis.time_button == 1:
                    mixer.music.stop()
                    mixer.music.load("./sound/Berliner Philharmoniker.mp3")
                    mixer.music.play(-1, 0.0)

                self.time.stop()
            else:
                #没有确认退出
                self.state_start_end += 1
        self.state_start_end += 1

    def state_refresh(self):
        if self.statis.state == 1:
            self.statis.state = 0
            #print(self.statis.label_return)#标签
            start = QDate.currentDate()
            #print(start.toString(Qt.DefaultLocaleLongDate))#开始的年月日
            time_start = QTime.currentTime()
            print(time_start.toString(Qt.DefaultLocaleLongDate))  #开始的时分秒
            self.set_begin(
                start.toString(Qt.DefaultLocaleLongDate),  #zd
                time_start.toString(Qt.DefaultLocaleLongDate),
                self.statis.label_return)
            icon = QIcon()
            icon.addPixmap(QPixmap(":/over/over.png"))
            self.pushButton.setIcon(icon)
            icon1 = QIcon()
            icon1.addPixmap(QPixmap(":/stop/on.png"))
            self.pushButton_2.setIcon(icon1)
            self.label.setText(self.statis.label_return)

            if self.statis.time_button == 0:
                self.time_start_up = time_start
                self.lcd1.setVisible(True)
                self.lcd2.setVisible(False)
            else:
                hour = int(time_start.hour()) + int(
                    self.statis.hour_time_return)
                minute = int(time_start.minute()) + int(
                    self.statis.minute_time_return)
                second = int(time_start.second()) + int(
                    self.statis.second_time_return)
                msec = int(self.statis.hour_time_return) * 3600 * 1000 + int(
                    self.statis.minute_time_return) * 60 * 1000 + int(
                        self.statis.second_time_return) * 1000
                self.time_start_data = start
                if second >= 60:
                    minute += 1
                if minute >= 60:
                    hour += 1
                if hour >= 24:
                    self.time_start_data = start.addDays(1)
                self.time_start_up = time_start
                self.time_start_fall = time_start.addMSecs(msec)
                self.lcd1.setVisible(False)
                self.lcd2.setVisible(True)

        if self.statis.state == 2:
            self.statis.state = 0
            self.state_start_end += 1

    def continue_stop(self):
        #暂停继续
        self.state_continue_stop += 1
        if self.state_start_end % 2 == 1 and self.state_continue_stop % 2 == 1:
            self.statis.state = 1
            self.state_refresh()
            icon1 = QIcon()
            icon1.addPixmap(QPixmap(":/stop/on.png"))
            self.pushButton_2.setIcon(icon1)
            self.time.start()

        if self.state_start_end % 2 == 1 and self.state_continue_stop % 2 == 0:
            self.check = "无"
            text, ok = QInputDialog.getText(self, '任务备注', '任务备注')
            if ok:
                now_end = QDate.currentDate()
                print(now_end.toString(Qt.DefaultLocaleLongDate))  #结束时的年月日
                time_end = QTime.currentTime()
                print(time_end.toString(Qt.DefaultLocaleLongDate))  #结束时的时分秒
                self.new_check = QLabel(text)
                self.check = self.new_check.text()
                print('任务备注=%s' % self.check)  #title
                self.set_end(time_end.toString(Qt.DefaultLocaleLongDate),
                             self.check)  #zd
                self.set_begin(now_end.toString(Qt.DefaultLocaleLongDate),
                               time_end.toString(Qt.DefaultLocaleLongDate), '')
                icon1 = QIcon()
                icon1.addPixmap(QPixmap(":/on/stop.png"))
                self.pushButton_2.setIcon(icon1)

                self.interval += self.time_start_up.msecsTo(time_end)
                if self.interval < 0:
                    self.interval += 86400 * 1000

                self.time.stop()
            else:
                self.state_continue_stop += 1

    #每次开始会调用
    def set_begin(self, year, begin_time, tags):  # zd
        # 年的格式转化
        self.task_is_on = True

        def year_transform(year):
            new_year = ''
            for i in year:
                if i >= '0' and i <= '9':
                    new_year = new_year + i
                else:
                    new_year = new_year + '/'
            return new_year[:-1]

        self.year = year_transform(year)
        self.begin_time = begin_time
        if tags:
            self.tags = tags

    #结束或者暂停会调用 用于写入数据库
    def set_end(self, end_time, title):  #zd
        self.task_is_on = False

        # 判断是否大于1分钟,是则返回true否则false
        def cmp_1min(time1, time2):
            # print('begin compare')
            #print(time1+' '+time2)
            t1 = time1.split(':')
            t1 = [int(x) for x in t1]
            t2 = time2.split(':')
            t2 = [int(x) for x in t2]
            # print('interval is {}'.format(60*( 60*(t2[0]-t1[0])+(t2[1]-t1[1]) )+(t2[2]-t1[2])))
            return 60 * (60 * (t2[0] - t1[0]) +
                         (t2[1] - t1[1])) + (t2[2] - t1[2]) >= 60

        if not cmp_1min(self.begin_time, end_time):
            print('小于1分钟,不予计入')
            QMessageBox.warning(self, '提示', '小于1分钟,不予计入', QMessageBox.Yes)
            return
        obj = {
            'title': title,
            'phase': (self.year, self.begin_time, end_time),
            'tags': self.tags
        }
        if not obj['title']:
            obj['title'] = '(无)'

        print(obj)
        with open('./data/tasks', 'a') as f:
            f.write(dumps(obj) + '\n')

        with open('./data/date_list', 'r') as f:
            date_list = [x.strip() for x in f.readlines()]
            if self.year in date_list:
                return
        with open('./data/date_list', 'a') as f:
            f.write(self.year + '\n')
        print('加入新日期')

    #调用数据分析窗口
    def analyze(self):
        self.anayze_window_opened = True
        self.anayze_window = analysis()

    def closeEvent(self, QCloseEvent):
        res = QMessageBox.question(self, '消息', '是否关闭这个窗口?',
                                   QMessageBox.Yes | QMessageBox.No,
                                   QMessageBox.No)
        if res == QMessageBox.Yes:
            if self.anayze_window_opened:
                self.anayze_window.close()
            if self.task_is_on:
                self.set_end(
                    QTime.currentTime().toString(Qt.DefaultLocaleLongDate),
                    '(无任务名)')
            QCloseEvent.accept()

        else:
            QCloseEvent.ignore()

    def initial_variables(self):  #zd
        self.anayze_window_opened = False
        self.task_is_on = False
        self.year = ''
        self.tt = 0

    def skip_day(self):
        if not self.task_is_on:
            return
        # 年的格式转化
        def year_transform(year):
            new_year = ''
            for i in year:
                if i >= '0' and i <= '9':
                    new_year = new_year + i
                else:
                    new_year = new_year + '/'
            return new_year[:-1]

        #last_time = QTime.currentTime().toString(Qt.DefaultLocaleLongDate)
        last_date = QDate.currentDate().toString(Qt.DefaultLocaleLongDate)
        if self.year != year_transform(last_date):
            print('天数不同!!!')
            self.set_end('23:59:59', '(无)')
            self.set_begin(last_date, '00:00:00', self.tags)

    def test(self):
        self.tt += 1
        print('悬浮窗第{}次'.format(self.tt))
Ejemplo n.º 4
0
class window(QtWidgets.QMainWindow):   
   def __init__(self):
      super(window,self).__init__()
      self.currentlocal=0
      self.data=None
      self.checker=0
      self.lastcolored=0
      self.photo = QLabel(self)
      self.port=0
      self.pixmap = QPixmap('photo.png')
      self.pixmap = self.pixmap.scaled(600, 300, QtCore.Qt.KeepAspectRatio)
      self.photo.setPixmap(self.pixmap)

      self.labelgif=QLabel(self)      
      self.labelgif.setStyleSheet("QLabel { background-color : white;}");
      self.labelgif.setGeometry(100,50,500,430)
      self.movie = QtGui.QMovie('data.gif', QtCore.QByteArray(),self.labelgif)
      self.movie.setSpeed(100)
      self.labelgif.setMovie(self.movie) 
      self.movie.start()
      self.labelgif.setVisible(False)

      self.labelyazi=QLabel(self)
      self.labelgif1=QLabel(self)      
      self.labelgif1.setStyleSheet("QLabel { background-color : white;}")
      self.labelyazi.setText('G'+"\u00F6"+"zl"+"\u0259"+"yin..")
      font1=QtGui.QFont('Times',17)
      self.labelyazi.setFont(font1)
      self.labelyazi.setVisible(False)
      self.labelyazi.setGeometry(350,150,150,60)
      self.labelgif1.setGeometry(150,100,489,289)
      self.movie1 = QtGui.QMovie('wait.gif', QtCore.QByteArray(),self.labelgif1)
      self.movie1.setSpeed(100)
      self.labelgif1.setMovie(self.movie1) 
      self.movie1.start()
      self.labelgif1.setVisible(False)

      
      self.setWindowTitle("Diplom i\u015Fi v1")      
      self.setWindowIcon(QtGui.QIcon('pyicon.png'))
      self.button = QPushButton('PyQt5 button', self)#button yaradildi
      self.listw=QListWidget(self)#listWidget yaradildi
      self.button1=QPushButton(self)
      self.buttonlocal=QPushButton(self)
      self.buttonlocal.setText('Qo\u015F')
      self.button1.setText("Temperaturu"+" " +"\u00F6"+"l"+"\u00E7")
      self.dial=QDial(self)
      self.lcd=QLCDNumber(self)
      self.label=QLabel(self)
      self.labelrefresh=QLabel(self)
      self.obj=[]
   
      
      self.listCOM=QListWidget(self)
      self.spin=QSpinBox(self)
      self.radiosan=QRadioButton(self)
      self.radiosan.setText("Saniy"+"\u0259")
      self.radiodeq=QRadioButton(self)
      self.radiodeq.setText("D"+"\u0259"+"qiq"+"\u0259")
      self.starting()
      self.initUI()

      
   def initUI(self):                  
        self.setFixedSize(700,500)
        self.dial.setNotchesVisible(True)
        self.labelrefresh.setText('Yenil\u0259m\u0259k \u00FC\u00E7\u00FCn F5 d\u00FCym\u0259sini s\u0131x\u0131n ')
        self.labelrefresh.setStyleSheet("QLabel{background-color: yellow; }")
        font=QtGui.QFont('Times',10,QtGui.QFont.Bold)
        self.labelrefresh.setFont(font)
        self.lcd.setVisible(False)
        self.photo.setVisible(False)
        self.photo.raise_()            
        self.labelgif.raise_()
        self.labelgif1.raise_()
        self.labelyazi.raise_()
        self.spin.setRange(1,60)
        self.dial.setRange(1,60)
        self.button.setText("\u015E"+"\u0259"+"b\u0259k\u0259ni yoxla")
        self.button1.setEnabled(False)
        self.button.setEnabled(False)
        self.spin.setEnabled(False)
        self.dial.setEnabled(False)
        self.radiosan.setEnabled(False)
        self.radiodeq.setEnabled(False)
        self.label.setText('Qo\u015Fulmu'+'\u015F cihaz yoxdur')
        self.label.setStyleSheet("QLabel { background-color : #e20000; color : black; }");
        newfont = QtGui.QFont('Times',11) 
        self.label.setFont(newfont)        
        

        
        #geometries
        self.setGeometry(40,50,700,500)
        self.button.setGeometry(20,40,120,50)
        self.listw.setGeometry(380,160,300,200)
        self.button1.setGeometry(575,40,120,50)
        self.dial.setGeometry(40,400,75,70)
        self.spin.setGeometry(150,425,50,25)
        self.radiosan.setGeometry(150,400,75,25)
        self.radiodeq.setGeometry(150,380,75,25)
        self.lcd.setGeometry(300,40,100,50)
        self.buttonlocal.setGeometry(150,40,125,50)
        self.label.setGeometry(520,440,155,30)
        self.listCOM.setGeometry(20,160,300,200)
        self.labelrefresh.setGeometry(20,100,220,30)
        self.photo.setGeometry(50,100,600,300)
        
    
        #events
        self.buttonlocal.clicked.connect(self.checklocal)
        self.button.clicked.connect(self.thread1)
        self.button.clicked.connect(self.threadnetwork)
        self.dial.valueChanged.connect(self.spin.setValue)
        self.spin.valueChanged.connect(self.dial.setValue)
        self.listCOM.doubleClicked.connect(self.showdialog)
        self.listw.doubleClicked.connect(self.showdialogremote)
        self.button1.clicked.connect(self.thread) # communication
        self.radiodeq.clicked.connect(self.spinvalue)
        self.radiosan.clicked.connect(self.dialvalue)
        self.button1.clicked.connect(self.threadback)


    
   def threadback(self):
      if  self.radiodeq.isChecked() or self.radiosan.isChecked():
         self.thread1=threading.Thread(target=self.send)
         self.thread1.start()
      else:
         pass
   def loading(self):
      m=loading()
      

      
   def send(self):
      try:    
         self.currentlocal.open()
         remotestr=self.listw.currentItem().text()
         li=remotestr.split("-")
         xbee_network=self.currentlocal.get_network()         
         remote=xbee_network.get_device_by_64(XBee64BitAddress.from_hex_string(li[0]))
         arr_64=self.currentlocal.get_64bit_addr()
         NEW_TIMEOUT_FOR_SYNC_OPERATIONS = 1
         self.currentlocal.set_sync_ops_timeout(NEW_TIMEOUT_FOR_SYNC_OPERATIONS)
         if self.radiosan.isChecked():
            self.currentlocal.send_data(remote,str(arr_64)+"-"+str(self.spin.value()))
         else:
            self.currentlocal.send_data(remote,str(arr_64)+"-"+str(self.spin.value()*60))
         self.labelgif1.setVisible(False)     
         
                   
         self.labelgif1.setVisible(True)
         self.labelyazi.setVisible(True)
         while(True):
            self.data=self.currentlocal.read_data()
            if(self.data!=None):
               self.data=self.data.data.decode()
               self.labelgif1.setVisible(False)
               self.labelyazi.setVisible(False)
               break 
             
         self.currentlocal.close()
         
         data_list=self.data.split(',')
         self.labelgif.setVisible(True)
         
         objects = []
         performance=[]
         for i in range(1,len(data_list)):
            objects.append(i)
         for i in range(len(data_list)-1):
            li=data_list[i]
            li=li.split('-')
            performance.append(li[1])
         
         y_pos = np.arange(len(objects))
         objects=tuple(objects)
         plt.figure("Qrafik")
         plt.xticks(y_pos, objects)
         plt.ylabel('Temperatur')
         plt.xlabel('Zaman')
         plt.plot(y_pos,performance)
         self.labelgif.setVisible(False)
         plt.show()
         self.data=None
         
      except:
         print('salam')
         self.currentlocal.close()
      
         

         
   def showdialog(self): 
      try:
         li=self.listCOM.currentItem().text().split('-')
         local=XBeeDevice(li[2],9600)
         local.open()
         arr_64=local.get_64bit_addr()
         arr_16=local.get_16bit_addr()
         arr_node=local.get_node_id()
         arr_pro=local.get_protocol()
         arr_hard=local.get_hardware_version()
         local.close()
         dlg=dialog(arr_64,arr_16,arr_node,arr_pro,arr_hard)
      except:
         pass    #exception

      
   def showdialogremote(self): 
      li=self.listw.currentItem().text().split('-')
      if self.checker !=0:
         self.lastcolored.setBackground(QtGui.QColor(255,255,255))
         
      self.lastcolored=self.listw.currentItem()
      self.listw.currentItem().setBackground(QtGui.QColor(239, 255, 25))
      try:
         self.currentlocal.open()
         
         xbee_network=self.currentlocal.get_network()
         
         remote=xbee_network.get_device_by_64(XBee64BitAddress.from_hex_string(li[0]))
         
         arr_64=remote.get_64bit_addr()
         
         arr_16=remote.get_16bit_addr()
         arr_node=remote.get_node_id()
         arr_pro=remote.get_protocol()
         arr_hard=remote.get_hardware_version()
         self.currentlocal.close()
         dlg=dialog(arr_64,arr_16,arr_node,arr_pro,arr_hard)
         self.checker=1
      except:
         pass # exception
      

   def spinvalue(self):
      self.dial.setRange(1,60)
      self.spin.setRange(1,60)
      self.dial.setValue(1)
   def dialvalue(self):
      self.dial.setRange(4,60)
      self.spin.setRange(4,60)
      self.dial.setValue(4)
      
        
   def keyPressEvent(self, event):
      key = event.key()
      if key == QtCore.Qt.Key_F5:
         self.threadrefresh()


      

   def checklocal(self):                                               
      try:         
         if (self.currentlocal !=0):
            for i in range(0,self.listCOM.count()):
                 self.listCOM.item(i).setBackground(QtGui.QColor(255, 255, 255))
         self.listCOM.currentItem().setBackground(QtGui.QColor(97, 255, 66))
         li=self.listCOM.currentItem().text().split('-')
         self.currentlocal = XBeeDevice(li[2], 9600)
         self.port=li[2]        
         self.currentCOM=self.listCOM.currentItem().text()
         self.currentlocal.open()
         self.currentlocal.close()
         self.listw.clear()
         self.button1.setEnabled(True)
         self.button.setEnabled(True)
         self.spin.setEnabled(True)
         self.dial.setEnabled(True)     
         self.radiosan.setEnabled(True)
         self.radiodeq.setEnabled(True)
         if platform.system()=='Linux':
            self.label.setGeometry(500,440,180,30)
         self.label.setText('Qo\u015Fulmu'+'\u015F port: '+str(li[2]))
         self.checker=0  
         self.label.setStyleSheet("QLabel { background-color : #22ce00; color : white; }")
         
         
         
         
      except:
         QMessageBox.about(self, 'Yanl\u0131\u015F', 'Lokal cihaz\u0131n portu do\u011Fru deyil')

   def refresh(self):                                                                  
      self.listCOM.clear()
      index=0
      if platform.system()=='Windows':
         for i in range(0,257):
               try:               
                  local_xbee = XBeeDevice('COM'+str(i), 9600)
                  local_xbee.open()
                  addr64=local_xbee.get_64bit_addr()
                  noid=local_xbee.get_node_id()
                  local_xbee.close()
                  self.listCOM.addItem(str(addr64)+"-"+str(noid)+"-"+'COM'+str(i))
                  if(self.port=='COM'+str(i)):               
                     self.listCOM.item(index).setBackground(QtGui.QColor(97, 255, 66))
                  index+=1
               except:
                  pass
      elif platform.system()=='Linux':
         for i in range(257):
            try:               
               local_xbee = XBeeDevice('/dev/ttyUSB'+str(i), 9600)
               local_xbee.open()
               addr64=local_xbee.get_64bit_addr()
               noid=local_xbee.get_node_id()
               local_xbee.close()
               self.listCOM.addItem(str(addr64)+"-"+str(noid)+"-"+'/dev/ttyUSB'+str(i))
               if(self.port=='/dev/ttyUSB'+str(i)):               
                  self.listCOM.item(index).setBackground(QtGui.QColor(97, 255, 66))
               index+=1
            except:
               pass
      self.checker=0
         
      
      

         
        
   def thread(self):                                               
      if  self.radiodeq.isChecked() or self.radiosan.isChecked():
         self.thread=threading.Thread(target=self.timing)
         self.thread.start()
      else:
         QMessageBox.about(self, 'Yanl\u0131\u015F', 'Zaman vahidini se\u00E7in')

         
            
            
   def thread1(self):                                                          
      if  self.radiodeq.isChecked() or self.radiosan.isChecked():
         self.thread1=threading.Thread(target=self.scan)
         self.thread1.start()
      else:
         QMessageBox.about(self, 'Yanl\u0131\u015F', 'Zaman vahidini se\u00E7in')

   def threadnetwork(self):
      if  self.radiodeq.isChecked() or self.radiosan.isChecked():
         self.thread1=threading.Thread(target=self.network)
         self.thread1.start()
      else:
         pass


   def network(self):
      try:
         self.button1.setEnabled(False)
         self.buttonlocal.setEnabled(False)
         self.button.setEnabled(False)
         self.button1.setEnabled(False)
         self.spin.setEnabled(False)
         self.dial.setEnabled(False)    
         self.radiosan.setEnabled(False)
         self.radiodeq.setEnabled(False)
         self.listw.clear()
         self.currentlocal.open()
         xbee_network=self.currentlocal.get_network()
         xbee_network.clear()
         listdev=[]
         def callback_device_discovered(remote):
            listdev.append(str(remote))
         if self.radiosan.isChecked():
            if(self.spin.value()>25):
               defe=int((self.spin.value())/25)
               qaliqsan=(self.spin.value())%25
               for i in range(0,defe):
                  xbee_network.set_discovery_timeout(22)  
                  xbee_network.add_device_discovered_callback(callback_device_discovered)
                  xbee_network.start_discovery_process()
                  while xbee_network.is_discovery_running():
                     QtCore.QThread.msleep(100)
               if(qaliqsan<4):
                  add=q=4-qaliqsan
                  xbee_network.set_discovery_timeout(qaliqsan+add)  
                  xbee_network.add_device_discovered_callback(callback_device_discovered)
                  xbee_network.start_discovery_process()
                  while xbee_network.is_discovery_running():
                     QtCore.QThread.msleep(100)
               else:
                  xbee_network.set_discovery_timeout(qaliqsan) 
                  xbee_network.add_device_discovered_callback(callback_device_discovered)
                  xbee_network.start_discovery_process()
                  while xbee_network.is_discovery_running():
                     QtCore.QThread.msleep(100)
                     
               
               self.currentlocal.close()
            else:
               
               xbee_network.set_discovery_timeout(self.spin.value())   
               xbee_network.add_device_discovered_callback(callback_device_discovered)
               xbee_network.start_discovery_process()
               while xbee_network.is_discovery_running():
                  QtCore.QThread.msleep(100)
               self.currentlocal.close()
               
           
            self.photo.setVisible(True)
            listdev=list(set(listdev))
            for i in range(0,len(listdev)):
               self.listw.addItem(listdev[i])
            QtCore.QThread.msleep(1000)
            self.photo.setEnabled(True)
            self.buttonlocal.setEnabled(True)
            self.button1.setEnabled(True)
            self.button.setEnabled(True)
            self.spin.setEnabled(True)
            self.dial.setEnabled(True)     
            self.radiosan.setEnabled(True)
            self.radiodeq.setEnabled(True)
            self.photo.setVisible(False)
            
            

         if self.radiodeq.isChecked():
         
            defe=int((self.spin.value()*60)/25)
            qaliqsan=(self.spin.value()*60)%25
            for i in range(0,defe):
               xbee_network.set_discovery_timeout(22)  # 24 seconds + saniye elave.
               xbee_network.add_device_discovered_callback(callback_device_discovered)
               xbee_network.start_discovery_process()
               while xbee_network.is_discovery_running():
                  QtCore.QThread.msleep(100)
            xbee_network.set_discovery_timeout(qaliqsan)  # qaliq saniye.
            xbee_network.add_device_discovered_callback(callback_device_discovered)
            xbee_network.start_discovery_process()
            while xbee_network.is_discovery_running():
               QtCore.QThread.msleep(100)
            self.currentlocal.close()
         else:
            xbee_network.set_discovery_timeout(self.spin.value())  # qaliq saniye 
            xbee_network.add_device_discovered_callback(callback_device_discovered)
            xbee_network.start_discovery_process()
            while xbee_network.is_discovery_running():
               QtCore.QThread.msleep(100)
            self.currentlocal.close()
            
         self.photo.setVisible(True)  
         listdev=list(set(listdev))
         for i in range(0,len(listdev)):
            self.listw.addItem(listdev[i])
         QtCore.QThread.msleep(2000)
         self.buttonlocal.setEnabled(True)
         self.button1.setEnabled(True)
         self.button.setEnabled(True)
         self.spin.setEnabled(True)
         self.dial.setEnabled(True)
         self.radiosan.setEnabled(True)
         self.radiodeq.setEnabled(True)
         self.photo.setVisible(False)
         
      except:
         self.currentlocal.close()





   def threadrefresh(self):
      t=threading.Thread(target=self.refresh)
      t.start()
      


   #UI has been finished
      
   def timing(self):
      QtCore.QThread.msleep(1000)
      self.button1.setEnabled(False)
      if(self.radiodeq.isChecked()):
         self.lcd.setVisible(True)
         j=self.spin.value()*60
         k=self.spin.value()
         if(k<10):
            self.lcd.display("0{}:00".format(k))
            QtCore.QThread.msleep(1000)
         else:
            self.lcd.display("{}:00".format(k))
            QtCore.QThread.msleep(1000)
            
         j-=1
         k-=1
         while(j>-1):
            if(k<10):
               if(j%60<10):
                  if(j%60 is 0):                     
                     self.lcd.display("0{}:0{}".format(k,j%60))
                     k-=1
                     j-=1
                     QtCore.QThread.msleep(1000)
                     continue
                  self.lcd.display("0{}:0{}".format(k,j%60))
                  app.processEvents()
                  QtCore.QThread.msleep(1000)                     
                  j-=1
               else:
                  self.lcd.display("0{}:{}".format(k,j%60))
                  QtCore.QThread.msleep(1000)                     
                  j-=1
            else:
               if(j%60 is 0):
                  self.lcd.display("0{}:0{}".format(k,j%60))
                  k-=1
                  j-=1
                  QtCore.QThread.msleep(1000)
                  continue
               if(j%60<10):
                  self.lcd.display("{}:0{}".format(k,j%60))
                  QtCore.QThread.msleep(1000)
                  j-=1
               else:
                  self.lcd.display("{}:{}".format(k,j%60))
                  QtCore.QThread.msleep(1000)                     
                  j-=1
         self.lcd.setVisible(False)
         self.button1.setEnabled(True)

      elif (self.radiosan.isChecked()):
         self.lcd.setVisible(True)
         timing=self.spin.value()
         for i in range(timing,-1,-1):                     
            if(i<10):
               self.lcd.display("00:0{}".format(i))
               QtCore.QThread.msleep(1000)
               
            else:
               self.lcd.display("00:{}".format(i))
               QtCore.QThread.msleep(1000)
         self.lcd.setVisible(False)
         self.button1.setEnabled(True)

   def starting(self):
      splash=QtWidgets.QSplashScreen(QtGui.QPixmap('splash.jpg'),QtCore.Qt.WindowStaysOnTopHint)
      splash.show()
      for i in range(0,257):
         app.processEvents()
         if (i is 50):
               splash.showMessage("<h1><font color=#608fdb>Proqram başladılır!</font></h1>", QtCore.Qt.AlignTop)
               QtCore.QThread.msleep(1000)
         try:
            if (platform.system() == 'Windows'):
               local_xbee = XBeeDevice('COM'+str(i), 9600)
               local_xbee.open()
               addr64=local_xbee.get_64bit_addr()
               noid=local_xbee.get_node_id()
               local_xbee.close()
               self.listCOM.addItem(str(addr64)+"-"+str(noid)+"-"+'COM'+str(i))
            elif (platform.system() == 'Linux'):
               local_xbee = XBeeDevice('/dev/ttyUSB'+str(i), 9600)
               local_xbee.open()
               addr64=local_xbee.get_64bit_addr()
               noid=local_xbee.get_node_id()
               local_xbee.close()
               self.listCOM.addItem(str(addr64)+"-"+str(noid)+"-"+'/dev/ttyUSB'+str(i))         
         except:
            pass
      splash.close()

         
         
         



   def createlistw(self):
       self.listw.clear()
       for i in range(0,9):
          self.obj.append(i)
          self.obj[i]=elements()
          self.obj[i].t=[10,20,30,40,2,3,4,5,6]
          self.obj[i].s=[5,6,7,8,9,1,2,3,4,5,88]
          self.listw.addItem(str(self.obj[i].t[i]))

            
           

   def scan(self):
      self.button.setEnabled(False)

      if(self.radiodeq.isChecked()):
         self.lcd.setVisible(True)
         j=self.spin.value()*60
         k=self.spin.value()
         if(k<10):
            self.lcd.display("0{}:00".format(k))
            QtCore.QThread.msleep(1000)
         else:
            self.lcd.display("{}:00".format(k))
            QtCore.QThread.msleep(1000)
            
         j-=1
         k-=1
         while(j>-1):
            if(k<10):
               if(j%60<10):
                  if(j%60 is 0):
                     self.lcd.display("0{}:0{}".format(k,j%60))
                     k-=1
                     j-=1
                     QtCore.QThread.msleep(1000)
                     continue
                  self.lcd.display("0{}:0{}".format(k,j%60))
                  app.processEvents()
                  QtCore.QThread.msleep(1000)                     
                  j-=1
               else:
                  self.lcd.display("0{}:{}".format(k,j%60))
                  QtCore.QThread.msleep(1000)                     
                  j-=1
            else:
               if(j%60 is 0):
                  self.lcd.display("0{}:0{}".format(k,j%60))
                  k-=1
                  j-=1
                  QtCore.QThread.msleep(1000)
                  continue
               if(j%60<10):
                  self.lcd.display("{}:0{}".format(k,j%60))
                  QtCore.QThread.msleep(1000)
                  j-=1
               else:
                  self.lcd.display("{}:{}".format(k,j%60))
                  QtCore.QThread.msleep(1000)                     
                  j-=1
         self.lcd.setVisible(False)
         self.button.setEnabled(True)
      elif (self.radiosan.isChecked()):
         self.lcd.setVisible(True)
         timing=self.spin.value()
         for i in range(timing,-1,-1):
            if(i<10):
               self.lcd.display("00:0{}".format(i))
               QtCore.QThread.msleep(1000)                     
            else:
               self.lcd.display("00:{}".format(i))
               QtCore.QThread.msleep(1000)
         self.lcd.setVisible(False)
         self.button.setEnabled(True)