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