예제 #1
0
class TimesWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        # Вывод даты
        self.lbl_data = QLabel(
            'Сегодня: ' + QDate.currentDate().toString('dd.MM.yyyy'), self)
        self.lbl_data.setFont(QFont('Times', 15))
        self.lbl_data.move(150, 25)
        # Вывод дисплеев и текстов со временем в различных поясах России, включая ваше время
        self.lcd_mine = QLCDNumber(self)
        self.lcd_mine.move(200, 50)
        self.lcd_mine.resize(100, 50)

        self.lbl_mine = QLabel('Ваше время', self)
        self.lbl_mine.move(210, 100)
        self.lbl_mine.setFont(QFont('Times', 12))

        self.lcd_kal = QLCDNumber(self)
        self.lcd_kal.resize(100, 50)
        self.lcd_kal.move(50, 125)

        self.lbl_kal = QLabel('Калининградское время', self)
        self.lbl_kal.move(25, 175)
        self.lbl_kal.setFont(QFont('Times', 10))

        self.lcd_msk = QLCDNumber(self)
        self.lcd_msk.resize(100, 50)
        self.lcd_msk.move(200, 125)

        self.lbl_msk = QLabel('Московское время', self)
        self.lbl_msk.move(195, 175)
        self.lbl_msk.setFont(QFont('Times', 10))

        self.lcd_sam = QLCDNumber(self)
        self.lcd_sam.resize(100, 50)
        self.lcd_sam.move(350, 125)

        self.lbl_sam = QLabel('Самарское время', self)
        self.lbl_sam.move(350, 175)
        self.lbl_sam.setFont(QFont('Times', 10))

        self.lcd_ekb = QLCDNumber(self)
        self.lcd_ekb.resize(100, 50)
        self.lcd_ekb.move(50, 200)

        self.lbl_ekb = QLabel('Екатеринбургское время', self)
        self.lbl_ekb.move(25, 250)
        self.lbl_ekb.setFont(QFont('Times', 10))

        self.lcd_omsk = QLCDNumber(self)
        self.lcd_omsk.resize(100, 50)
        self.lcd_omsk.move(200, 200)

        self.lbl_omsk = QLabel('Омское время', self)
        self.lbl_omsk.move(210, 250)
        self.lbl_omsk.setFont(QFont('Times', 10))

        self.lcd_kras = QLCDNumber(self)
        self.lcd_kras.resize(100, 50)
        self.lcd_kras.move(350, 200)

        self.lbl_kras = QLabel('Красноярское время', self)
        self.lbl_kras.move(340, 250)
        self.lbl_kras.setFont(QFont('Times', 10))

        self.lcd_irk = QLCDNumber(self)
        self.lcd_irk.resize(100, 50)
        self.lcd_irk.move(50, 275)

        self.lbl_irk = QLabel('Иркутское время', self)
        self.lbl_irk.move(50, 325)
        self.lbl_irk.setFont(QFont('Times', 10))

        self.lcd_yakut = QLCDNumber(self)
        self.lcd_yakut.resize(100, 50)
        self.lcd_yakut.move(200, 275)

        self.lbl_yakut = QLabel('Якутское время', self)
        self.lbl_yakut.move(205, 325)
        self.lbl_yakut.setFont(QFont('Times', 10))

        self.lcd_vldv = QLCDNumber(self)
        self.lcd_vldv.resize(100, 50)
        self.lcd_vldv.move(350, 275)

        self.lbl_vldv = QLabel('Владивостокское время', self)
        self.lbl_vldv.move(330, 325)
        self.lbl_vldv.setFont(QFont('Times', 10))

        self.lcd_mgdn = QLCDNumber(self)
        self.lcd_mgdn.resize(100, 50)
        self.lcd_mgdn.move(100, 350)

        self.lbl_mgdn = QLabel('Магаданское время', self)
        self.lbl_mgdn.move(90, 400)
        self.lbl_mgdn.setFont(QFont('Times', 10))

        self.lcd_kamch = QLCDNumber(self)
        self.lcd_kamch.resize(100, 50)
        self.lcd_kamch.move(300, 350)

        self.lbl_kamch = QLabel('Камчатское время', self)
        self.lbl_kamch.move(297, 400)
        self.lbl_kamch.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):
        # Обновляем дату, мало ли юзер зайдет в 23:59
        self.lbl_data.setText('Сегодня: ' +
                              QDate.currentDate().toString('dd.MM.yyyy'))
        # Вытаскиваем системное время и выводим его
        self.time_mine = QTime().currentTime().toString('hh:mm')
        self.lcd_mine.display(self.time_mine)
        # Находим разницу системного времени от UTC
        now = QDateTime.currentDateTime()
        offset = now.offsetFromUtc() // 3600
        # Находим разницу между вашим и московским временем от UTC
        offset_your_and_msk = offset - 3
        time_mine_hour = int(self.time_mine.split(':')[0])
        time_mine_min = str(int(self.time_mine.split(':')[1]))
        if len(time_mine_min) == 1:
            time_mine_min = '0' + time_mine_min
        # Проверяем не отрицательные ли часы и выводим время
        if time_mine_hour - offset_your_and_msk - 1 < 0:
            kal_hour = 24 - time_mine_hour - offset_your_and_msk - 1
        elif time_mine_hour - offset_your_and_msk - 1 > 23:
            kal_hour = time_mine_hour - offset_your_and_msk - 1 - 24
        else:
            kal_hour = time_mine_hour - offset_your_and_msk - 1
        self.lcd_kal.display(str(kal_hour) + ':' + time_mine_min)

        if time_mine_hour - offset_your_and_msk < 0:
            msk_hour = 24 - time_mine_hour - offset_your_and_msk
        elif time_mine_hour - offset_your_and_msk > 23:
            msk_hour = time_mine_hour - offset_your_and_msk - 24
        else:
            msk_hour = time_mine_hour - offset_your_and_msk
        self.lcd_msk.display(str(msk_hour) + ':' + time_mine_min)

        if time_mine_hour - offset_your_and_msk + 1 < 0:
            sam_hour = 24 - time_mine_hour - offset_your_and_msk + 1
        elif time_mine_hour - offset_your_and_msk + 1 > 23:
            sam_hour = time_mine_hour - offset_your_and_msk + 1 - 24
        else:
            sam_hour = time_mine_hour - offset_your_and_msk + 1
        self.lcd_sam.display(str(sam_hour) + ':' + time_mine_min)

        if time_mine_hour - offset_your_and_msk + 2 < 0:
            ekb_hour = 24 - time_mine_hour - offset_your_and_msk + 2
        elif time_mine_hour - offset_your_and_msk + 2 > 23:
            ekb_hour = time_mine_hour - offset_your_and_msk + 2 - 24
        else:
            ekb_hour = time_mine_hour - offset_your_and_msk + 2
        self.lcd_ekb.display(str(ekb_hour) + ':' + time_mine_min)

        if time_mine_hour - offset_your_and_msk + 3 < 0:
            omsk_hour = 24 - time_mine_hour - offset_your_and_msk + 3
        elif time_mine_hour - offset_your_and_msk + 3 > 23:
            omsk_hour = time_mine_hour - offset_your_and_msk + 3 - 24
        else:
            omsk_hour = time_mine_hour - offset_your_and_msk + 3
        self.lcd_omsk.display(str(omsk_hour) + ':' + time_mine_min)

        if time_mine_hour - offset_your_and_msk + 4 < 0:
            kras_hour = 24 - time_mine_hour - offset_your_and_msk + 4
        elif time_mine_hour - offset_your_and_msk + 4 > 23:
            kras_hour = time_mine_hour - offset_your_and_msk + 4 - 24
        else:
            kras_hour = time_mine_hour - offset_your_and_msk + 4
        self.lcd_kras.display(str(kras_hour) + ':' + time_mine_min)

        if time_mine_hour - offset_your_and_msk + 5 < 0:
            irk_hour = 24 - time_mine_hour - offset_your_and_msk + 5
        elif time_mine_hour - offset_your_and_msk + 5 > 23:
            irk_hour = time_mine_hour - offset_your_and_msk + 5 - 24
        else:
            irk_hour = time_mine_hour - offset_your_and_msk + 5
        self.lcd_irk.display(str(irk_hour) + ':' + time_mine_min)

        if time_mine_hour - offset_your_and_msk + 6 < 0:
            yakut_hour = 24 - time_mine_hour - offset_your_and_msk + 6
        elif time_mine_hour - offset_your_and_msk + 6 > 23:
            yakut_hour = time_mine_hour - offset_your_and_msk + 6 - 24
        else:
            yakut_hour = time_mine_hour - offset_your_and_msk + 6
        self.lcd_yakut.display(str(yakut_hour) + ':' + time_mine_min)

        if time_mine_hour - offset_your_and_msk + 7 < 0:
            vldv_hour = 24 - time_mine_hour - offset_your_and_msk + 7
        elif time_mine_hour - offset_your_and_msk + 7 > 23:
            vldv_hour = time_mine_hour - offset_your_and_msk + 7 - 24
        else:
            vldv_hour = time_mine_hour - offset_your_and_msk + 7
        self.lcd_vldv.display(str(vldv_hour) + ':' + time_mine_min)

        if time_mine_hour - offset_your_and_msk + 8 < 0:
            mgdn_hour = 24 - time_mine_hour - offset_your_and_msk + 8
        elif time_mine_hour - offset_your_and_msk + 8 > 23:
            mgdn_hour = time_mine_hour - offset_your_and_msk + 8 - 24
        else:
            mgdn_hour = time_mine_hour - offset_your_and_msk + 8
        self.lcd_mgdn.display(str(mgdn_hour) + ':' + time_mine_min)

        if time_mine_hour - offset_your_and_msk + 9 < 0:
            kamch_hour = 24 - time_mine_hour - offset_your_and_msk + 9
        elif time_mine_hour - offset_your_and_msk + 9 > 23:
            kamch_hour = time_mine_hour - offset_your_and_msk + 9 - 24
        else:
            kamch_hour = time_mine_hour - offset_your_and_msk + 9
        self.lcd_kamch.display(str(kamch_hour) + ':' + time_mine_min)