Skip to content

Commit 4dc2daf

Browse files
authored
v9
Big update Input fixed Gui edit
1 parent 3c0127e commit 4dc2daf

7 files changed

Lines changed: 110 additions & 111 deletions

File tree

Engine/BMP.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def __init__(self, path):
88
self.path = path
99

1010
file = open(path, "rb")
11-
self.dataBytes = self.file.read()
11+
self.dataBytes = file.read()
1212
file.close()
1313
self.dataHex = Byte.bytesToHex(self.dataBytes)
1414

Engine/Element.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ def block(self):
2121
self.focused = False
2222
self.enable = False
2323

24-
def intersectionFromEvent(self, event):
24+
def intersectionFromEvent(self):
2525
"""Проверка на пересечение с мышью из события\n(Event) - событие"""
2626
if self.enable:
27-
if event.type == Input.Types.Mouse:
28-
if event.mouseType == Input.Mouse.MOVE:
29-
self.intersection(event.mouseX, event.mouseY)
27+
if Input.eventType == Input.Types.Mouse:
28+
if Input.mouseType == Input.Mouse.MOVE:
29+
self.intersection(Input.mouseX, Input.mouseY)
3030

3131
def intersection(self, x, y):
3232
"""Проверка на пересечение по координатам\nПринимает: (int) x - координата x, (int) y - координата y"""

Engine/Group.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ def append(self, element):
1717
"""Добавление элементов в группу\nПринимает: (Element or any [GUI]) element - элемент для добавления в группу"""
1818
self.elements.append(element)
1919

20-
def eventHandler(self, event):
20+
def eventHandler(self):
2121
"""Обработка событий для всех элементов в группе\nПринимает: (Event) - событие"""
2222
for element in self.elements:
23-
element.intersectionFromEvent(event)
23+
element.intersectionFromEvent()
2424

2525
if hasattr(element, "inputFromEvent"):
26-
element.inputFromEvent(event)
26+
element.inputFromEvent()
2727

2828
def click(self):
2929
"""Обработка событий для всех элементов в группе"""

Engine/Input.py

Lines changed: 46 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import ctypes
22
from ctypes.wintypes import *
3+
from Engine.Logging import *
4+
from Engine.Byte import *
35

46
# CTYPES ADAPTATE -------------------------------
57

@@ -70,8 +72,6 @@ class Input:
7072
ruCaps = "ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ"
7173
ru = ruCaps.lower()
7274

73-
listning = True
74-
7575
class Types:
7676
"""Типы событий"""
7777
Keyboard = 1
@@ -83,7 +83,7 @@ class Types:
8383
class Mouse:
8484
"""События мыши"""
8585
#Mouse type:
86-
CLICK = 0
86+
DOWN = 0
8787
MOVE = 1
8888
DOUBLECLICK = 2
8989
WHEELV = 4
@@ -153,25 +153,6 @@ class Focus:
153153
"""События фокуса"""
154154
pass
155155

156-
class Event:
157-
"""Событие"""
158-
def __init__(self, type=-1, mouseKey=-1, mouseX=-1, mouseY=-1, mouseType=-1, keyboardCode=-1, keyboardChar=-1, keyboardState=-1):
159-
"""Событие"""
160-
161-
self.type = type
162-
163-
self.mouseType = mouseType
164-
self.mouseKey = mouseKey
165-
self.mouseX = mouseX
166-
self.mouseY = mouseY
167-
168-
self.keyboardCode = keyboardCode
169-
self.keyboardChar = keyboardChar
170-
self.keyboardState = keyboardState
171-
172-
def __str__(self):
173-
return f"Type: {self.type}\nmouseType: {self.mouseType}\nMouseKey: {self.mouseKey}\nMouseX: {self.mouseX}\nMouseY: {self.mouseY}\nKeyboardCode: {self.keyboardCode}\nKeyboardChar: {self.keyboardChar}\nKeyboardState: {self.keyboardState}\n"
174-
175156
def init(useHotkey=False, lineInput=False, echo=False, resizeEvents=False, mouseEvents=False, insert=False, quickEdit=False, extended=False):
176157
"""Включает получение событий\nПринимает: (bool) useHotkey - использование горячих клавиш, (bool) lineInput - описание отсутствует, (bool) echo - добавление в выходной массив, (bool) resizeEvents - принятие событий изменения размеров окна, (bool) mouseEvents - принятие событий мыши, (bool) insert - включает insert, (bool) quickEdit - выделение мышью, (bool) extended - запрет quickEdit"""
177158
Input.handle = ctypes.windll.kernel32.GetStdHandle(-10)
@@ -189,43 +170,57 @@ def init(useHotkey=False, lineInput=False, echo=False, resizeEvents=False, mouse
189170
if quickEdit: out += 64
190171
if extended: out += 128
191172

173+
Input.varInit()
174+
192175
ctypes.windll.kernel32.SetConsoleMode(Input.handle, out)
193176

194-
def tick(asyn=True):
195-
"""Получение событий, обработка и их запись в массив\nПринимает: (bool) asyn - не ждать события"""
196-
if not Input.listning: return
177+
def reset():
178+
"""Отчистка входного буффера"""
179+
prev = 0
180+
Input.tick()
181+
while int(bytes(Input.events)[0]) != 0:
182+
Input.tick()
197183

198-
ctypes.windll.kernel32.ReadConsoleInputExW(Input.handle, ctypes.byref(Input.InputRecord), 1, ctypes.byref(Input.events), 2 if asyn else 0)
184+
Input.varInit()
185+
186+
def varInit():
187+
"""Сброс / инициализация переменных"""
188+
Input.eventType = 0
199189

200-
record = Input.InputRecord
190+
Input.mouseX = 0
191+
Input.mouseY = 0
192+
Input.mouseKey = 0
193+
194+
Input.mouseType = 0
195+
196+
Input.keyboardCode = 0
197+
Input.keyboardChar = 0
198+
Input.keyboardState = 0
199+
Input.prevKeyboardState = False
200+
Input.prevMouseState = False
201201

202-
event = record.Event
203-
eventType = record.EventType
202+
Input.event = 0
203+
Input.eventString = ""
204204

205-
mouseX = event.MouseEvent.dwMousePosition.X # X
206-
mouseY = event.MouseEvent.dwMousePosition.Y # Y
207-
mouseKey = event.MouseEvent.dwButtonState # какая кнопка клавиатуры нажата
208-
mouseType = event.MouseEvent.dwEventFlags # колесо / нажатие / движение / двойное нажатие
205+
def tick():
206+
"""Получение событий, обработка и их запись в массив\nПринимает: (bool) asyn - не ждать события"""
209207

210-
keyboardCode = event.KeyEvent.wVirtualKeyCode # Код кнопки клавиатуры
211-
keyboardChar = event.KeyEvent.uChar.UnicodeChar # Символ клавиши
212-
keyboardState = event.KeyEvent.bKeyDown # Состояние кнопки
208+
ctypes.windll.kernel32.ReadConsoleInputExW(Input.handle, ctypes.byref(Input.InputRecord), 1, ctypes.byref(Input.events), 2)
209+
record = Input.InputRecord
213210

214-
event = Input.Event(type=eventType, mouseType=mouseType, mouseKey=mouseKey, mouseX=mouseX, mouseY=mouseY, keyboardCode=keyboardCode, keyboardChar=keyboardChar, keyboardState=keyboardState)
215-
Input.EVENTS.append(event)
211+
Input.event = record.Event
212+
Input.eventType = record.EventType
216213

217-
def clearEvents():
218-
"""Очистка массива событий"""
219-
Input.EVENTS = []
214+
Input.mouseX = Input.event.MouseEvent.dwMousePosition.X # X
215+
Input.mouseY = Input.event.MouseEvent.dwMousePosition.Y # Y
216+
Input.mouseKey = Input.event.MouseEvent.dwButtonState # какая кнопка клавиатуры нажата
217+
218+
Input.prevMouseState = Input.mouseType == Input.Mouse.DOWN
219+
Input.mouseType = Input.event.MouseEvent.dwEventFlags # колесо / нажатие / движение / двойное нажатие
220220

221-
def getEvents(tick=True):
222-
"""Возвращает события\nПринимает: (bool) tick - авто получение событий"""
223-
if tick:
224-
Input.tick()
221+
Input.prevKeyboardState = Input.keyboardState if Input.eventType == Input.Types.Keyboard else False
222+
Input.keyboardCode = Input.event.KeyEvent.wVirtualKeyCode # Код кнопки клавиатуры
223+
Input.keyboardChar = Input.event.KeyEvent.uChar.UnicodeChar # Символ клавиши
224+
Input.keyboardState = Input.event.KeyEvent.bKeyDown if Input.eventType == Input.Types.Keyboard else False # Состояние кнопки
225225

226-
for event in Input.EVENTS:
227-
if len(Input.EVENTS):
228-
ev = Input.EVENTS.pop()
229-
yield ev
230-
else:
231-
return []
226+
Input.eventString = f"{Input.mouseX}{Input.mouseY}{Input.mouseKey}{Input.keyboardCode}{Input.keyboardChar}{Input.keyboardState}"

Engine/Textbox.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from Engine.Input import Input
22
from Engine.Element import Element
3+
from Engine.Logging import Logging
4+
35

46
class Textbox(Element):
57
"""[GUI] Текстовое поле"""
@@ -29,17 +31,18 @@ def block(self):
2931
self.enable = False
3032
self.selected = False
3133

32-
def inputFromEvent(self, event):
34+
def inputFromEvent(self,):
3335
"""Обработка нажатий клавиатуры\nПринимает: (Event) event - событие"""
3436
if not(self.selected): return
35-
if event.type == Input.Types.Keyboard:
36-
if event.keyboardState == Input.Keyboard.DOWN:
37-
if event.keyboardCode == Input.Keyboard.Keys.BACKSPACE:
37+
if Input.eventType == Input.Types.Keyboard:
38+
Logging.log(Input.keyboardState, Input.Keyboard.DOWN, Input.prevKeyboardState)
39+
if Input.keyboardState == Input.Keyboard.DOWN and not Input.prevKeyboardState:
40+
if Input.keyboardCode == Input.Keyboard.Keys.BACKSPACE:
3841
self.value = self.value[:-1]
3942

4043
elif len(self.value) < self.maxLength or self.maxLength == 0:
41-
if event.keyboardChar in self.alphabet: # вот это
42-
self.value += str(event.keyboardChar) # пофиксить
44+
if Input.keyboardChar in self.alphabet:
45+
self.value += str(Input.keyboardChar)
4346
self.change(self)
4447

4548
def draw(self):

Engine/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
"""Модуль для пользовательских приложений в консоли"""
1+
"""Многосторонний модуль, для разных задач"""
2+
# version 9
23

34
# Engine
45
from Engine.Admin import Admin
56
from Engine.BMP import BMP
6-
from Engine.EBM import EBM
77
from Engine.Byte import Byte
88
from Engine.Color import Color
99
from Engine.Config import Config
10+
from Engine.EBM import EBM
1011
from Engine.ImageBMP import ImageBMP
1112
from Engine.ImageEBM import ImageEBM
1213
from Engine.Input import Input

README.md

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# _CONSOLE-ENGINE_
22
Описание библиотеки:
3-
Модуль для пользовательских приложений в консоли
3+
Многосторонний модуль, для разных задач
44
![Python](https://img.shields.io/badge/python-3670A0?logo=python&logoColor=ffdd54)
55
![Windows](https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white)
66
![MIT](https://img.shields.io/badge/license-MIT%20License-green)
@@ -15,14 +15,14 @@
1515
|[Admin](https://github.com/Sinus44/Console-Engine#class-Admin)|Запуск от имени адмнистратора|
1616
|[Byte](https://github.com/Sinus44/Console-Engine#class-Byte)|Работа с данными BYTES-HEX-DEC-STRING|
1717
|[BMP](https://github.com/Sinus44/Console-Engine#class-BMP)|Импорт файлов *.bmp, получение данных из файла и их структуризация|
18-
|[EBM](https://github.com/Sinus44/Console-Engine#class-EBM)|Импорт файлов *.ebm, получение данных из файла и их структуризация|
1918
|[Color](https://github.com/Sinus44/Console-Engine#class-Color)|Работа с цветами для консоли|
2019
|[Config](https://github.com/Sinus44/Console-Engine#class-Config)|Обработка конфигурационных файлов *.cfg, чтение, запись, автосохранение|
20+
|[EBM](https://github.com/Sinus44/Console-Engine#class-EBM)|Импорт файлов *.ebm, получение данных из файла и их структуризация|
2121
|[ImageBMP](https://github.com/Sinus44/Console-Engine#class-ImageBMP)|Импорт картинок пригодных для вставки в Window, из формата *.bmp|
2222
|[ImageEBM](https://github.com/Sinus44/Console-Engine#class-ImageEBM)|Импорт картинок пригодных для вставки в Window, из формата *.ebm|
23+
|[Logging](https://github.com/Sinus44/Console-Engine#class-Logging)|Запись отладочной информации в файл|
2324
|[Input](https://github.com/Sinus44/Console-Engine#class-Input)|Обработка входящих событий окна консоли|
2425
|[Interval](https://github.com/Sinus44/Console-Engine#class-Interval)|Цикличный вызов функции в соответветсвии с интервалом|
25-
|[Logging](https://github.com/Sinus44/Console-Engine#class-Logging)|Запись отладочной информации в файл|
2626
|[Mmath](https://github.com/Sinus44/Console-Engine#class-Mmath)|Математические функции|
2727
|[Output](https://github.com/Sinus44/Console-Engine#class-Output)|Настройка выходного буффера окна консоли|
2828
|[Perceptron](https://github.com/Sinus44/Console-Engine#class-Perceptron)|Простой нейрон|
@@ -130,29 +130,6 @@
130130
Конструктор
131131
Принимает: (string) path - путь к файлу
132132

133-
## Class EBM
134-
Импорт файлов *.ebm, получение данных из файла и их структуризация
135-
### Методы:
136-
137-
### \_\_init\_\_()
138-
Конструктор
139-
Принимает: (string) path - путь к файлу
140-
141-
### convertArrayToEBM()
142-
Преобразует массив в EMB
143-
Принимает: (3_array_int) array - 3х мерный массив int содержащий цвета пикселей
144-
145-
### readFromFile()
146-
Чтение из файла
147-
148-
### readFromHex()
149-
Чтение из hex строки
150-
Принимает: (string) hex - строка формата hex
151-
152-
### saveToFile()
153-
Сохранение в файл
154-
Принимает: (string) fileName - название файла
155-
156133
## Class Color
157134
Работа с цветами для консоли
158135
### Методы:
@@ -189,6 +166,29 @@
189166
### write()
190167
Запись в файл
191168

169+
## Class EBM
170+
Импорт файлов *.ebm, получение данных из файла и их структуризация
171+
### Методы:
172+
173+
### \_\_init\_\_()
174+
Конструктор
175+
Принимает: (string) path - путь к файлу
176+
177+
### convertArrayToEBM()
178+
Преобразует массив в EMB
179+
Принимает: (3_array_int) array - 3х мерный массив int содержащий цвета пикселей
180+
181+
### readFromFile()
182+
Чтение из файла
183+
184+
### readFromHex()
185+
Чтение из hex строки
186+
Принимает: (string) hex - строка формата hex
187+
188+
### saveToFile()
189+
Сохранение в файл
190+
Принимает: (string) fileName - название файла
191+
192192
## Class ImageBMP
193193
Импорт картинок пригодных для вставки в Window, из формата *.bmp
194194
### Методы:
@@ -215,6 +215,17 @@
215215
Принимает: (tuple) color - цвет
216216
Возвращает: (string) - символ код цвета OR (int) - 0 если alpha канал
217217

218+
## Class Logging
219+
Запись отладочной информации в файл
220+
### Методы:
221+
222+
### log()
223+
Логирование в файл
224+
Принимает: (*strings) - строки для логгирования
225+
226+
### print()
227+
Логирование в консольnПринимает: (*strings) - строки для логгирования
228+
218229
## Class Input
219230
Обработка входящих событий окна консоли
220231
### Методы:
@@ -223,17 +234,16 @@
223234
Включает получение событий
224235
Принимает: (bool) useHotkey - использование горячих клавиш, (bool) lineInput - описание отсутствует, (bool) echo - добавление в выходной массив, (bool) resizeEvents - принятие событий изменения размеров окна, (bool) mouseEvents - принятие событий мыши, (bool) insert - включает insert, (bool) quickEdit - выделение мышью, (bool) extended - запрет quickEdit
225236

237+
### reset()
238+
Отчистка входного буффера
239+
240+
### varInit()
241+
Сброс / инициализация переменных
242+
226243
### tick()
227244
Получение событий, обработка и их запись в массив
228245
Принимает: (bool) asyn - не ждать события
229246

230-
### clearEvents()
231-
Очистка массива событий
232-
233-
### getEvents()
234-
Возвращает события
235-
Принимает: (bool) tick - авто получение событий
236-
237247
## Class Interval
238248
Цикличный вызов функции в соответветсвии с интервалом
239249
### Методы:
@@ -251,17 +261,6 @@
251261
### function()
252262
Метод котоый будет запущен в отдельном потоке
253263

254-
## Class Logging
255-
Запись отладочной информации в файл
256-
### Методы:
257-
258-
### log()
259-
Логирование в файл
260-
Принимает: (*strings) - строки для логгирования
261-
262-
### print()
263-
Логирование в консольnПринимает: (*strings) - строки для логгирования
264-
265264
## Class Mmath
266265
Математические функции
267266
### Методы:
@@ -651,3 +650,4 @@
651650

652651
### draw()
653652
Отрисовка
653+

0 commit comments

Comments
 (0)