-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
91 lines (79 loc) · 3.82 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# Импортируем модуль для работы с win32api
import win32api
# Импортируем модуль для работы с pyqt5
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QBrush
from PyQt5.QtCore import Qt, QThread
# Создаем класс для виджета с цветом
class ColorWidget(QWidget):
# Конструктор класса
def __init__(self):
# Вызываем конструктор родительского класса
super().__init__()
# Устанавливаем прозрачный фон
self.setAttribute(Qt.WA_TranslucentBackground)
# Устанавливаем флаги окна
self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.Tool)
# Устанавливаем размер и положение окна
self.setGeometry(0, 0, 100, 100)
# Создаем атрибут для хранения текущей раскладки
self.layout = "unknown"
# Метод для рисования цвета в углу экрана
def paintEvent(self, event):
# Создаем объект рисования
painter = QPainter(self)
# Если раскладка русская, то рисуем красный круг
if self.layout == "ru":
painter.setBrush(QBrush(Qt.red))
# Если раскладка английская, то рисуем зеленый круг
elif self.layout == "en":
painter.setBrush(QBrush(Qt.green))
# Если раскладка неизвестная, то рисуем серый круг
else:
painter.setBrush(QBrush(Qt.gray))
# Рисуем круг в углу экрана
painter.drawEllipse(0, 0, 100, 100)
# Создаем класс для потока с обновлением цвета и раскладки
class ColorThread(QThread):
# Конструктор класса
def __init__(self, widget):
# Вызываем конструктор родительского класса
super().__init__()
# Сохраняем ссылку на виджет
self.widget = widget
# Метод для запуска потока
def run(self):
# Входим в бесконечный цикл
while True:
# Обновляем виджет
self.widget.update()
# Обновляем раскладку виджета
self.widget.layout = get_layout()
# Ждем 100 миллисекунд
#self.sleep(1)
# Функция для определения текущей раскладки
def get_layout():
# Получаем идентификатор текущей раскладки
id = win32api.GetKeyboardLayout()
print(id)
# Если идентификатор равен 1049, то это русская раскладка
if id == 68748313:
return "ru"
# Если идентификатор равен 1033, то это английская раскладка
elif id == 67699721:
return "en"
# Иначе возвращаем неизвестную раскладку
else:
return "unknown"
# Создаем приложение
app = QApplication([])
# Создаем виджет с цветом
widget = ColorWidget()
# Создаем поток с обновлением цвета и раскладки
thread = ColorThread(widget)
# Запускаем поток
thread.start()
# Показываем виджет
widget.show()
# Запускаем главный цикл приложения
app.exec_()