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])
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()
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))
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)