import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication
import load_window
def close_App():
    QtWidgets.qApp.quit()
class ExampleApp(QtWidgets.QMainWindow, load_window.Ui_MainWindow):
    def __init__(self):
        super().__init__()
        # Скрываем заголовок окна
        self.setWindowFlag(Qt.FramelessWindowHint)
        # Устанавливаем заголовок
        self.setWindowTitle("no title")
        # Скрываем фон окна
        self.setAttribute(Qt.WA_TranslucentBackground)
        # Таймер для текста
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.onTicketText)
        self.timer.start(200)
        # Таймер для градиента
        self.timer2 = QtCore.QTimer()
        self.timer2.timeout.connect(self.onTicketGradient)
        self.timer2.start(100)
        self.setupUi(self)
        self.moveToCenter()
        self.initUI()
    def moveToCenter(self):
        screen_geometry = QApplication.desktop().availableGeometry()
        screen_size = (screen_geometry.width(), screen_geometry.height())
        win_size = (self.frameSize().width(), self.frameSize().height())
        x = int((screen_size[0] - win_size[0]) / 2)
        y = int((screen_size[1] - win_size[1]) / 2)
        self.move(x, y)
    ###########################################################################
    # Загрузка версии программы
    def loadVer(self):
        f = open('ver.txt', 'r')
        text_file = f.read()
        f.close()
        self.label_ver.setText(text_file)
    ###########################################################################
    ###########################################################################
    # Анимация текста
    def onTicketText(self):
        # загрузка наименования камеры из файла name.txt
        f = open('name.txt', 'r')  # открытие файла только на чтение
        text_file = '-- [ ' + f.read() + ' ] --'  # чтение текста файла
        f.close()  # закрытие файла
        self.label_cam_name.setText(text_file)  # применение текста
        # Изменение текста в зависимости от содержания
        text = self.label_load.text()  # получение текущего текста
        if text == '...':  # если изначальный текст то
            self.label_load.setText('Waiting for camera connection')  # изменить его на "Waiting for camera connection"
        elif text == 'Waiting for camera connection':  # если текст равен "Waiting for camera connection"
            self.label_load.setText('Waiting for camera connection.')  # изменить его на "Waiting for camera
            # connection."
        elif text == 'Waiting for camera connection.':  # если текст равен "Waiting for camera connection."
            self.label_load.setText('Waiting for camera connection..')  # изменить его на "Waiting for camera
            # connection.."
        elif text == 'Waiting for camera connection..':  # если текст равен "Waiting for camera connection.."
            self.label_load.setText('Waiting for camera connection...')  # изменить его на "Waiting for camera
            # connection..."
        else:  # иначе сбрасываем на начальное значение
            self.label_load.setText('Waiting for camera connection')  # изменить его на "Waiting for camera connection"
    ###########################################################################
    cy = 0.1  # начальное значение градиента
    rev = 0  # направление движения градиента
    ###########################################################################
    # Анимация градиентной заливки
    def onTicketGradient(self):
        if self.rev == 0:  # если реверс не включен
            if self.cy < 0.8:  # если значение меньше максимального
                self.cy += 0.1  # увеличивать значение
            else:  # иначе если значение больше максимального
                self.rev = 1  # включить реверс
        else:  # иначе если реверс включен
            if self.cy > 0.2:  # если значение больше минимального
                self.cy -= 0.1  # уменьшать значение
            else:  # иначе если значение меньше минимального
                self.rev = 0  # выключить реверс
        # создание стиля
        styler = '#frame_body_circl2{background-color: qconicalgradient(cx:0.5, cy:' + str(
            self.cy) + ', angle:0, stop:0 rgba(12, 103, 201, 0), stop:0.448276 rgba(12, 103, 201, 255), stop:1 rgba(' \
                       '255, 255, 255, 0));border-radius:150px;} '
        # применение стиля к анимации градиента
        self.frame_body_circl2.setStyleSheet(styler)
    ###########################################################################
    ###########################################################################
    # Инициализация формы
    def initUI(self):
        self.but_close.clicked.connect(close_App)  # добавление кнопки закртытия функцию
        self.loadVer()  # загрузка версии программы из файла ver.txt
    ###########################################################################
    ###########################################################################
    # Ожидание нажатие на клавиатуре Ctrl + Q (Тестовый пример обработки нажатия кнопок на клавиатуре)
    def keyPressEvent(self, e):
        if int(e.modifiers()) == Qt.Key_Control:  # если зажата кнопка Ctrl
            if e.key() == Qt.Key_Q:  # если нажата кнопка Q
                self.close()  # закрыть программу
    ###########################################################################
###########################################################################
# Инициализация и запуск формы
def main():
    app = QtWidgets.QApplication(sys.argv)
    window = ExampleApp()
    window.show()
    app.exec_()
if __name__ == '__main__':
    main()
###########################################################################