CharmPkk 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- charmpkk-0.4.0/CharmPkk.egg-info/PKG-INFO +77 -0
- charmpkk-0.4.0/CharmPkk.egg-info/SOURCES.txt +43 -0
- charmpkk-0.4.0/CharmPkk.egg-info/dependency_links.txt +1 -0
- charmpkk-0.4.0/CharmPkk.egg-info/top_level.txt +1 -0
- charmpkk-0.4.0/LICENSE +0 -0
- charmpkk-0.4.0/PKG-INFO +77 -0
- charmpkk-0.4.0/README.md +47 -0
- charmpkk-0.4.0/charmpkk/__init__.py +12 -0
- charmpkk-0.4.0/charmpkk/console/__init__.py +95 -0
- charmpkk-0.4.0/charmpkk/console/anim.py +120 -0
- charmpkk-0.4.0/charmpkk/console/banner.py +80 -0
- charmpkk-0.4.0/charmpkk/console/boxes.py +116 -0
- charmpkk-0.4.0/charmpkk/console/charts.py +95 -0
- charmpkk-0.4.0/charmpkk/console/colors.py +182 -0
- charmpkk-0.4.0/charmpkk/console/effects.py +166 -0
- charmpkk-0.4.0/charmpkk/console/forms.py +96 -0
- charmpkk-0.4.0/charmpkk/console/layout.py +77 -0
- charmpkk-0.4.0/charmpkk/console/live.py +67 -0
- charmpkk-0.4.0/charmpkk/console/markdown.py +92 -0
- charmpkk-0.4.0/charmpkk/console/menu.py +219 -0
- charmpkk-0.4.0/charmpkk/console/particles.py +426 -0
- charmpkk-0.4.0/charmpkk/console/progress_ext.py +187 -0
- charmpkk-0.4.0/charmpkk/console/terminal.py +127 -0
- charmpkk-0.4.0/charmpkk/console/text.py +72 -0
- charmpkk-0.4.0/charmpkk/console/themes.py +75 -0
- charmpkk-0.4.0/charmpkk/console/widgets.py +470 -0
- charmpkk-0.4.0/charmpkk/console/wizard.py +53 -0
- charmpkk-0.4.0/charmpkk/version.py +1 -0
- charmpkk-0.4.0/charmpkk/window/__init__.py +84 -0
- charmpkk-0.4.0/charmpkk/window/anim.py +233 -0
- charmpkk-0.4.0/charmpkk/window/app.py +125 -0
- charmpkk-0.4.0/charmpkk/window/command_palette.py +140 -0
- charmpkk-0.4.0/charmpkk/window/custom_titlebar.py +156 -0
- charmpkk-0.4.0/charmpkk/window/dialogs.py +119 -0
- charmpkk-0.4.0/charmpkk/window/effects.py +280 -0
- charmpkk-0.4.0/charmpkk/window/glass.py +290 -0
- charmpkk-0.4.0/charmpkk/window/particles.py +345 -0
- charmpkk-0.4.0/charmpkk/window/screens.py +64 -0
- charmpkk-0.4.0/charmpkk/window/shortcuts.py +63 -0
- charmpkk-0.4.0/charmpkk/window/table_view.py +142 -0
- charmpkk-0.4.0/charmpkk/window/theme.py +155 -0
- charmpkk-0.4.0/charmpkk/window/toast_manager.py +129 -0
- charmpkk-0.4.0/charmpkk/window/widgets.py +838 -0
- charmpkk-0.4.0/pyproject.toml +41 -0
- charmpkk-0.4.0/setup.cfg +4 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: CharmPkk
|
|
3
|
+
Version: 0.4.0
|
|
4
|
+
Summary: Красивые, плавные и настраиваемые интерфейсы для Python: консоль (TUI) и оконные приложения (GUI) с акрилом, стеклом, частицами и эффектами.
|
|
5
|
+
Author-email: Your Name <you@example.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/yourname/charmpkk
|
|
8
|
+
Project-URL: Source, https://github.com/yourname/charmpkk
|
|
9
|
+
Project-URL: Issues, https://github.com/yourname/charmpkk/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/yourname/charmpkk/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: ui,console,terminal,tui,tkinter,gui,acrylic,mica,glass,particles,animation,charmpkk
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Environment :: Console
|
|
23
|
+
Classifier: Environment :: X11 Applications
|
|
24
|
+
Classifier: Topic :: Software Development :: User Interfaces
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
26
|
+
Requires-Python: >=3.8
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
Dynamic: license-file
|
|
30
|
+
|
|
31
|
+
CharmPkk — библиотека для создания красивых, плавных и кастомизируемых интерфейсов на чистом Python. Работает в двух режимах: в терминале (TUI — где кастомизации максимум) и в окне (GUI на базе tkinter, без внешних зависимостей). Всё построено вокруг идей «мягкого стекла», живых частиц и плавных анимаций.
|
|
32
|
+
|
|
33
|
+
Возможности
|
|
34
|
+
Консоль (TUI)
|
|
35
|
+
|
|
36
|
+
Цвета и стили: ANSI/truecolor, 256-цветов, hex-цвета, градиенты, радуга, Style-контекст, готовые Palette-темы (dark, light, nord, dracula, gruvbox, tokyo_night, catppuccin, monokai).
|
|
37
|
+
|
|
38
|
+
Текст и рамки: выравнивание, обрезка, обёртка; 8 стилей рамок (single, double, round, heavy, dashed, dotted, ascii, shadow, none), панели, баннеры, big_text для больших ASCII-заголовков.
|
|
39
|
+
|
|
40
|
+
Виджеты: ProgressBar, FancyProgressBar (block/line/dots/star/arrow/square/shade/braille/heart), AnimatedProgressBar (плавно «догоняет» значение), MultiProgress, TaskList (как в CI), Spinner (9 пресетов кадров), Table (zebra, per-column alignment), списки, key_value, badge, statusline, tree.
|
|
41
|
+
|
|
42
|
+
Графики: sparkline, bar_chart, gauge, histogram, heatmap.
|
|
43
|
+
|
|
44
|
+
Интерактив: select, multiselect, tabs (стрелки + hotkeys), Form/Field с валидацией, Wizard/Step — пошаговые мастера.
|
|
45
|
+
|
|
46
|
+
Уведомления и диалоги: info/success/warning/error, Log, ask, ask_password, ask_number, ask_choice, confirm.
|
|
47
|
+
|
|
48
|
+
Markdown: render_markdown / print_md — заголовки, списки, цитаты, код, ссылки, inline-стили.
|
|
49
|
+
|
|
50
|
+
Анимации: 17 easing-функций, tween, Transition, Live (перерисовка блока на месте), эффекты fade_in, wave, shimmer, glitch, marquee, neon, typewriter с курсором.
|
|
51
|
+
|
|
52
|
+
Частицы (реальное время в терминале): Rain, Snow, Stars, Dust, Matrix, Bubbles, Fireflies + play()/play_preset() на N секунд на весь экран.
|
|
53
|
+
|
|
54
|
+
Терминал: скрытие/показ курсора, позиционирование, save/restore, alt_screen, смена заголовка окна, bell, flash, OSC 8 гиперссылки, OSC 52 clipboard, определение truecolor/256.
|
|
55
|
+
|
|
56
|
+
Окно (GUI, tkinter)
|
|
57
|
+
|
|
58
|
+
Темы: 10 встроенных (dark, light, nord, gruvbox, dracula, tokyo_night, catppuccin, solarized_dark/light, monokai) + ThemeManager + свои Theme.
|
|
59
|
+
|
|
60
|
+
Виджеты: StyledButton (7 вариантов × 3 размера), IconButton, StyledEntry (фокус-бордер, prefix/suffix, placeholder, password), TextArea, Toggle, Checkbox, RadioGroup, Slider, Combobox, SegmentedControl, Card, Badge, Divider, Tabs, Tooltip, Toast, Spinner, ProgressBar, TableView (сортировка, зебра, скролл, выбор строки).
|
|
61
|
+
|
|
62
|
+
Диалоги: MessageDialog, ConfirmDialog, InputDialog + модальный Frost (морозный слой поверх окна).
|
|
63
|
+
|
|
64
|
+
Композиция приложения: App с шапкой, действиями, сайдбаром, статус-баром, хелперами toast/message/confirm/input; Router/Screen — SPA-подобная навигация по одному окну; CommandPalette (Ctrl+K); ToastManager (очередь тостов в углу); Shortcuts (реестр горячих клавиш + окно-справка).
|
|
65
|
+
|
|
66
|
+
Frameless-окно: FramelessWindow + CustomTitleBar — перетаскивание, минимизация, максимизация, кнопка закрытия, ресайз по краям.
|
|
67
|
+
|
|
68
|
+
Стекло и акрил: apply_acrylic_win11 (Mica/Acrylic/Tabbed через DWMWA_SYSTEMBACKDROP_TYPE), apply_acrylic_win10 (SetWindowCompositionAttribute), make_glass_app(app) — универсальный one-call; GlassCard (градиент + светящаяся рамка + hover-glow), GlassPanel (слои-подложки), Frost (модальное затемнение).
|
|
69
|
+
|
|
70
|
+
Анимации: Animator (tween/pulse/sequence/color), animate, sequence, fade_in, fade_out, slide_in, fade_in_after, fade_out_destroy.
|
|
71
|
+
|
|
72
|
+
Эффекты: ripple (клик-волна на Canvas), Shimmer (скользящий блик), pulse, GradientFrame (вертикальный/горизонтальный градиент), NeonBorder, GlowText («дышащий» текст).
|
|
73
|
+
|
|
74
|
+
Частицы: ParticleCanvas с режимами rain, snow, stars, dust, bubbles, fireflies, matrix, custom (свой emitter), spawn_burst(x, y) (вспышки-салюты), attach_background(parent, ...) для фона под UI.
|
|
75
|
+
|
|
76
|
+
Философия
|
|
77
|
+
Никаких тяжёлых зависимостей — только tkinter из стандартной библиотеки. Библиотека строится по слоям: colors/text/boxes → widgets/layout/charts → effects/anim/particles → screens/router/palette. Каждый слой можно использовать отдельно или собирать из них готовые приложения: установщик, конфигуратор, дашборд, CLI-утилита — что угодно.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
CharmPkk.egg-info/PKG-INFO
|
|
5
|
+
CharmPkk.egg-info/SOURCES.txt
|
|
6
|
+
CharmPkk.egg-info/dependency_links.txt
|
|
7
|
+
CharmPkk.egg-info/top_level.txt
|
|
8
|
+
charmpkk/__init__.py
|
|
9
|
+
charmpkk/version.py
|
|
10
|
+
charmpkk/console/__init__.py
|
|
11
|
+
charmpkk/console/anim.py
|
|
12
|
+
charmpkk/console/banner.py
|
|
13
|
+
charmpkk/console/boxes.py
|
|
14
|
+
charmpkk/console/charts.py
|
|
15
|
+
charmpkk/console/colors.py
|
|
16
|
+
charmpkk/console/effects.py
|
|
17
|
+
charmpkk/console/forms.py
|
|
18
|
+
charmpkk/console/layout.py
|
|
19
|
+
charmpkk/console/live.py
|
|
20
|
+
charmpkk/console/markdown.py
|
|
21
|
+
charmpkk/console/menu.py
|
|
22
|
+
charmpkk/console/particles.py
|
|
23
|
+
charmpkk/console/progress_ext.py
|
|
24
|
+
charmpkk/console/terminal.py
|
|
25
|
+
charmpkk/console/text.py
|
|
26
|
+
charmpkk/console/themes.py
|
|
27
|
+
charmpkk/console/widgets.py
|
|
28
|
+
charmpkk/console/wizard.py
|
|
29
|
+
charmpkk/window/__init__.py
|
|
30
|
+
charmpkk/window/anim.py
|
|
31
|
+
charmpkk/window/app.py
|
|
32
|
+
charmpkk/window/command_palette.py
|
|
33
|
+
charmpkk/window/custom_titlebar.py
|
|
34
|
+
charmpkk/window/dialogs.py
|
|
35
|
+
charmpkk/window/effects.py
|
|
36
|
+
charmpkk/window/glass.py
|
|
37
|
+
charmpkk/window/particles.py
|
|
38
|
+
charmpkk/window/screens.py
|
|
39
|
+
charmpkk/window/shortcuts.py
|
|
40
|
+
charmpkk/window/table_view.py
|
|
41
|
+
charmpkk/window/theme.py
|
|
42
|
+
charmpkk/window/toast_manager.py
|
|
43
|
+
charmpkk/window/widgets.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
charmpkk
|
charmpkk-0.4.0/LICENSE
ADDED
|
File without changes
|
charmpkk-0.4.0/PKG-INFO
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: CharmPkk
|
|
3
|
+
Version: 0.4.0
|
|
4
|
+
Summary: Красивые, плавные и настраиваемые интерфейсы для Python: консоль (TUI) и оконные приложения (GUI) с акрилом, стеклом, частицами и эффектами.
|
|
5
|
+
Author-email: Your Name <you@example.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/yourname/charmpkk
|
|
8
|
+
Project-URL: Source, https://github.com/yourname/charmpkk
|
|
9
|
+
Project-URL: Issues, https://github.com/yourname/charmpkk/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/yourname/charmpkk/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: ui,console,terminal,tui,tkinter,gui,acrylic,mica,glass,particles,animation,charmpkk
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Environment :: Console
|
|
23
|
+
Classifier: Environment :: X11 Applications
|
|
24
|
+
Classifier: Topic :: Software Development :: User Interfaces
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
26
|
+
Requires-Python: >=3.8
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
Dynamic: license-file
|
|
30
|
+
|
|
31
|
+
CharmPkk — библиотека для создания красивых, плавных и кастомизируемых интерфейсов на чистом Python. Работает в двух режимах: в терминале (TUI — где кастомизации максимум) и в окне (GUI на базе tkinter, без внешних зависимостей). Всё построено вокруг идей «мягкого стекла», живых частиц и плавных анимаций.
|
|
32
|
+
|
|
33
|
+
Возможности
|
|
34
|
+
Консоль (TUI)
|
|
35
|
+
|
|
36
|
+
Цвета и стили: ANSI/truecolor, 256-цветов, hex-цвета, градиенты, радуга, Style-контекст, готовые Palette-темы (dark, light, nord, dracula, gruvbox, tokyo_night, catppuccin, monokai).
|
|
37
|
+
|
|
38
|
+
Текст и рамки: выравнивание, обрезка, обёртка; 8 стилей рамок (single, double, round, heavy, dashed, dotted, ascii, shadow, none), панели, баннеры, big_text для больших ASCII-заголовков.
|
|
39
|
+
|
|
40
|
+
Виджеты: ProgressBar, FancyProgressBar (block/line/dots/star/arrow/square/shade/braille/heart), AnimatedProgressBar (плавно «догоняет» значение), MultiProgress, TaskList (как в CI), Spinner (9 пресетов кадров), Table (zebra, per-column alignment), списки, key_value, badge, statusline, tree.
|
|
41
|
+
|
|
42
|
+
Графики: sparkline, bar_chart, gauge, histogram, heatmap.
|
|
43
|
+
|
|
44
|
+
Интерактив: select, multiselect, tabs (стрелки + hotkeys), Form/Field с валидацией, Wizard/Step — пошаговые мастера.
|
|
45
|
+
|
|
46
|
+
Уведомления и диалоги: info/success/warning/error, Log, ask, ask_password, ask_number, ask_choice, confirm.
|
|
47
|
+
|
|
48
|
+
Markdown: render_markdown / print_md — заголовки, списки, цитаты, код, ссылки, inline-стили.
|
|
49
|
+
|
|
50
|
+
Анимации: 17 easing-функций, tween, Transition, Live (перерисовка блока на месте), эффекты fade_in, wave, shimmer, glitch, marquee, neon, typewriter с курсором.
|
|
51
|
+
|
|
52
|
+
Частицы (реальное время в терминале): Rain, Snow, Stars, Dust, Matrix, Bubbles, Fireflies + play()/play_preset() на N секунд на весь экран.
|
|
53
|
+
|
|
54
|
+
Терминал: скрытие/показ курсора, позиционирование, save/restore, alt_screen, смена заголовка окна, bell, flash, OSC 8 гиперссылки, OSC 52 clipboard, определение truecolor/256.
|
|
55
|
+
|
|
56
|
+
Окно (GUI, tkinter)
|
|
57
|
+
|
|
58
|
+
Темы: 10 встроенных (dark, light, nord, gruvbox, dracula, tokyo_night, catppuccin, solarized_dark/light, monokai) + ThemeManager + свои Theme.
|
|
59
|
+
|
|
60
|
+
Виджеты: StyledButton (7 вариантов × 3 размера), IconButton, StyledEntry (фокус-бордер, prefix/suffix, placeholder, password), TextArea, Toggle, Checkbox, RadioGroup, Slider, Combobox, SegmentedControl, Card, Badge, Divider, Tabs, Tooltip, Toast, Spinner, ProgressBar, TableView (сортировка, зебра, скролл, выбор строки).
|
|
61
|
+
|
|
62
|
+
Диалоги: MessageDialog, ConfirmDialog, InputDialog + модальный Frost (морозный слой поверх окна).
|
|
63
|
+
|
|
64
|
+
Композиция приложения: App с шапкой, действиями, сайдбаром, статус-баром, хелперами toast/message/confirm/input; Router/Screen — SPA-подобная навигация по одному окну; CommandPalette (Ctrl+K); ToastManager (очередь тостов в углу); Shortcuts (реестр горячих клавиш + окно-справка).
|
|
65
|
+
|
|
66
|
+
Frameless-окно: FramelessWindow + CustomTitleBar — перетаскивание, минимизация, максимизация, кнопка закрытия, ресайз по краям.
|
|
67
|
+
|
|
68
|
+
Стекло и акрил: apply_acrylic_win11 (Mica/Acrylic/Tabbed через DWMWA_SYSTEMBACKDROP_TYPE), apply_acrylic_win10 (SetWindowCompositionAttribute), make_glass_app(app) — универсальный one-call; GlassCard (градиент + светящаяся рамка + hover-glow), GlassPanel (слои-подложки), Frost (модальное затемнение).
|
|
69
|
+
|
|
70
|
+
Анимации: Animator (tween/pulse/sequence/color), animate, sequence, fade_in, fade_out, slide_in, fade_in_after, fade_out_destroy.
|
|
71
|
+
|
|
72
|
+
Эффекты: ripple (клик-волна на Canvas), Shimmer (скользящий блик), pulse, GradientFrame (вертикальный/горизонтальный градиент), NeonBorder, GlowText («дышащий» текст).
|
|
73
|
+
|
|
74
|
+
Частицы: ParticleCanvas с режимами rain, snow, stars, dust, bubbles, fireflies, matrix, custom (свой emitter), spawn_burst(x, y) (вспышки-салюты), attach_background(parent, ...) для фона под UI.
|
|
75
|
+
|
|
76
|
+
Философия
|
|
77
|
+
Никаких тяжёлых зависимостей — только tkinter из стандартной библиотеки. Библиотека строится по слоям: colors/text/boxes → widgets/layout/charts → effects/anim/particles → screens/router/palette. Каждый слой можно использовать отдельно или собирать из них готовые приложения: установщик, конфигуратор, дашборд, CLI-утилита — что угодно.
|
charmpkk-0.4.0/README.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
CharmPkk — библиотека для создания красивых, плавных и кастомизируемых интерфейсов на чистом Python. Работает в двух режимах: в терминале (TUI — где кастомизации максимум) и в окне (GUI на базе tkinter, без внешних зависимостей). Всё построено вокруг идей «мягкого стекла», живых частиц и плавных анимаций.
|
|
2
|
+
|
|
3
|
+
Возможности
|
|
4
|
+
Консоль (TUI)
|
|
5
|
+
|
|
6
|
+
Цвета и стили: ANSI/truecolor, 256-цветов, hex-цвета, градиенты, радуга, Style-контекст, готовые Palette-темы (dark, light, nord, dracula, gruvbox, tokyo_night, catppuccin, monokai).
|
|
7
|
+
|
|
8
|
+
Текст и рамки: выравнивание, обрезка, обёртка; 8 стилей рамок (single, double, round, heavy, dashed, dotted, ascii, shadow, none), панели, баннеры, big_text для больших ASCII-заголовков.
|
|
9
|
+
|
|
10
|
+
Виджеты: ProgressBar, FancyProgressBar (block/line/dots/star/arrow/square/shade/braille/heart), AnimatedProgressBar (плавно «догоняет» значение), MultiProgress, TaskList (как в CI), Spinner (9 пресетов кадров), Table (zebra, per-column alignment), списки, key_value, badge, statusline, tree.
|
|
11
|
+
|
|
12
|
+
Графики: sparkline, bar_chart, gauge, histogram, heatmap.
|
|
13
|
+
|
|
14
|
+
Интерактив: select, multiselect, tabs (стрелки + hotkeys), Form/Field с валидацией, Wizard/Step — пошаговые мастера.
|
|
15
|
+
|
|
16
|
+
Уведомления и диалоги: info/success/warning/error, Log, ask, ask_password, ask_number, ask_choice, confirm.
|
|
17
|
+
|
|
18
|
+
Markdown: render_markdown / print_md — заголовки, списки, цитаты, код, ссылки, inline-стили.
|
|
19
|
+
|
|
20
|
+
Анимации: 17 easing-функций, tween, Transition, Live (перерисовка блока на месте), эффекты fade_in, wave, shimmer, glitch, marquee, neon, typewriter с курсором.
|
|
21
|
+
|
|
22
|
+
Частицы (реальное время в терминале): Rain, Snow, Stars, Dust, Matrix, Bubbles, Fireflies + play()/play_preset() на N секунд на весь экран.
|
|
23
|
+
|
|
24
|
+
Терминал: скрытие/показ курсора, позиционирование, save/restore, alt_screen, смена заголовка окна, bell, flash, OSC 8 гиперссылки, OSC 52 clipboard, определение truecolor/256.
|
|
25
|
+
|
|
26
|
+
Окно (GUI, tkinter)
|
|
27
|
+
|
|
28
|
+
Темы: 10 встроенных (dark, light, nord, gruvbox, dracula, tokyo_night, catppuccin, solarized_dark/light, monokai) + ThemeManager + свои Theme.
|
|
29
|
+
|
|
30
|
+
Виджеты: StyledButton (7 вариантов × 3 размера), IconButton, StyledEntry (фокус-бордер, prefix/suffix, placeholder, password), TextArea, Toggle, Checkbox, RadioGroup, Slider, Combobox, SegmentedControl, Card, Badge, Divider, Tabs, Tooltip, Toast, Spinner, ProgressBar, TableView (сортировка, зебра, скролл, выбор строки).
|
|
31
|
+
|
|
32
|
+
Диалоги: MessageDialog, ConfirmDialog, InputDialog + модальный Frost (морозный слой поверх окна).
|
|
33
|
+
|
|
34
|
+
Композиция приложения: App с шапкой, действиями, сайдбаром, статус-баром, хелперами toast/message/confirm/input; Router/Screen — SPA-подобная навигация по одному окну; CommandPalette (Ctrl+K); ToastManager (очередь тостов в углу); Shortcuts (реестр горячих клавиш + окно-справка).
|
|
35
|
+
|
|
36
|
+
Frameless-окно: FramelessWindow + CustomTitleBar — перетаскивание, минимизация, максимизация, кнопка закрытия, ресайз по краям.
|
|
37
|
+
|
|
38
|
+
Стекло и акрил: apply_acrylic_win11 (Mica/Acrylic/Tabbed через DWMWA_SYSTEMBACKDROP_TYPE), apply_acrylic_win10 (SetWindowCompositionAttribute), make_glass_app(app) — универсальный one-call; GlassCard (градиент + светящаяся рамка + hover-glow), GlassPanel (слои-подложки), Frost (модальное затемнение).
|
|
39
|
+
|
|
40
|
+
Анимации: Animator (tween/pulse/sequence/color), animate, sequence, fade_in, fade_out, slide_in, fade_in_after, fade_out_destroy.
|
|
41
|
+
|
|
42
|
+
Эффекты: ripple (клик-волна на Canvas), Shimmer (скользящий блик), pulse, GradientFrame (вертикальный/горизонтальный градиент), NeonBorder, GlowText («дышащий» текст).
|
|
43
|
+
|
|
44
|
+
Частицы: ParticleCanvas с режимами rain, snow, stars, dust, bubbles, fireflies, matrix, custom (свой emitter), spawn_burst(x, y) (вспышки-салюты), attach_background(parent, ...) для фона под UI.
|
|
45
|
+
|
|
46
|
+
Философия
|
|
47
|
+
Никаких тяжёлых зависимостей — только tkinter из стандартной библиотеки. Библиотека строится по слоям: colors/text/boxes → widgets/layout/charts → effects/anim/particles → screens/router/palette. Каждый слой можно использовать отдельно или собирать из них готовые приложения: установщик, конфигуратор, дашборд, CLI-утилита — что угодно.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""CharmPkk — красивые интерфейсы для Python: консоль и окно."""
|
|
2
|
+
from .version import __version__
|
|
3
|
+
from . import console
|
|
4
|
+
|
|
5
|
+
__all__ = ["console", "__version__"]
|
|
6
|
+
|
|
7
|
+
try:
|
|
8
|
+
from . import window # noqa: F401
|
|
9
|
+
__all__.append("window")
|
|
10
|
+
except Exception:
|
|
11
|
+
# tkinter может отсутствовать (например, headless-сервер)
|
|
12
|
+
pass
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
from . import colors, text, boxes, layout, widgets, charts, menu
|
|
2
|
+
from . import anim, particles, effects, live as _live_mod
|
|
3
|
+
from . import terminal as terminal_mod
|
|
4
|
+
from . import themes as console_themes
|
|
5
|
+
from . import banner as banner_mod
|
|
6
|
+
from . import forms as forms_mod
|
|
7
|
+
from . import wizard as wizard_mod
|
|
8
|
+
from . import markdown as markdown_mod
|
|
9
|
+
from . import progress_ext
|
|
10
|
+
from .colors import (
|
|
11
|
+
colorize, fg_rgb, bg_rgb, fg_hex, bg_hex, fg_256, bg_256,
|
|
12
|
+
gradient_text, rainbow_text, Style,
|
|
13
|
+
enable, disable, is_enabled, strip_ansi,
|
|
14
|
+
BOLD, DIM, ITALIC, UNDERLINE, BLINK, REVERSE, HIDDEN, STRIKE, RESET,
|
|
15
|
+
BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE,
|
|
16
|
+
BRIGHT_BLACK, BRIGHT_RED, BRIGHT_GREEN, BRIGHT_YELLOW,
|
|
17
|
+
BRIGHT_BLUE, BRIGHT_MAGENTA, BRIGHT_CYAN, BRIGHT_WHITE,
|
|
18
|
+
)
|
|
19
|
+
from .text import wrap, align, center, pad, truncate, typewriter, indent, visible_len
|
|
20
|
+
from .boxes import box, rule, section, panel, banner, STYLES
|
|
21
|
+
from .layout import columns, rows, grid, sidebar
|
|
22
|
+
from .widgets import (
|
|
23
|
+
ProgressBar, MultiProgress, Spinner, Table,
|
|
24
|
+
bullet_list, numbered_list, key_value, badge, statusline, tree,
|
|
25
|
+
notify, info, success, warning, error, Log,
|
|
26
|
+
ask, ask_password, ask_number, confirm, ask_choice,
|
|
27
|
+
)
|
|
28
|
+
from .charts import sparkline, bar_chart, gauge, histogram, heatmap
|
|
29
|
+
from .menu import select, multiselect, tabs
|
|
30
|
+
|
|
31
|
+
from .anim import (
|
|
32
|
+
ease, tween, lerp, lerp_color, Transition, EASINGS,
|
|
33
|
+
ease_in_quad, ease_out_quad, ease_in_out_quad,
|
|
34
|
+
ease_in_cubic, ease_out_cubic, ease_in_out_cubic,
|
|
35
|
+
ease_in_quart, ease_out_quart, ease_in_out_sine,
|
|
36
|
+
ease_in_expo, ease_out_expo,
|
|
37
|
+
ease_out_back, ease_out_elastic, ease_out_bounce,
|
|
38
|
+
)
|
|
39
|
+
from .particles import (
|
|
40
|
+
Canvas as ParticleCanvas, ParticleSystem,
|
|
41
|
+
Rain, Snow, Stars, Dust, Matrix, Bubbles, Fireflies,
|
|
42
|
+
play as play_particles, play_preset, PRESETS as PARTICLE_PRESETS,
|
|
43
|
+
)
|
|
44
|
+
from .effects import (
|
|
45
|
+
typewriter as typewriter_fx, fade_in, wave, shimmer,
|
|
46
|
+
glitch, marquee, neon,
|
|
47
|
+
)
|
|
48
|
+
from .live import Live, animate_to
|
|
49
|
+
|
|
50
|
+
from .terminal import Terminal, terminal
|
|
51
|
+
from .themes import Palette, REGISTRY as THEMES, get as get_theme, list_names as list_themes
|
|
52
|
+
from .banner import big as big_text
|
|
53
|
+
from .forms import Form, Field
|
|
54
|
+
from .wizard import Wizard, Step
|
|
55
|
+
from .markdown import render as render_markdown, print_md
|
|
56
|
+
from .progress_ext import FancyProgressBar, AnimatedProgressBar, TaskList
|
|
57
|
+
|
|
58
|
+
__all__ = [
|
|
59
|
+
"colors", "colorize", "fg_rgb", "bg_rgb", "fg_hex", "bg_hex", "fg_256", "bg_256",
|
|
60
|
+
"gradient_text", "rainbow_text", "Style", "enable", "disable", "is_enabled",
|
|
61
|
+
"strip_ansi",
|
|
62
|
+
"BOLD", "DIM", "ITALIC", "UNDERLINE", "BLINK", "REVERSE", "HIDDEN", "STRIKE", "RESET",
|
|
63
|
+
"BLACK", "RED", "GREEN", "YELLOW", "BLUE", "MAGENTA", "CYAN", "WHITE",
|
|
64
|
+
"BRIGHT_BLACK", "BRIGHT_RED", "BRIGHT_GREEN", "BRIGHT_YELLOW",
|
|
65
|
+
"BRIGHT_BLUE", "BRIGHT_MAGENTA", "BRIGHT_CYAN", "BRIGHT_WHITE",
|
|
66
|
+
"text", "wrap", "align", "center", "pad", "truncate", "typewriter", "indent", "visible_len",
|
|
67
|
+
"boxes", "box", "rule", "section", "panel", "banner", "STYLES",
|
|
68
|
+
"layout", "columns", "rows", "grid", "sidebar",
|
|
69
|
+
"widgets", "ProgressBar", "MultiProgress", "Spinner", "Table",
|
|
70
|
+
"bullet_list", "numbered_list", "key_value", "badge", "statusline", "tree",
|
|
71
|
+
"notify", "info", "success", "warning", "error", "Log",
|
|
72
|
+
"ask", "ask_password", "ask_number", "confirm", "ask_choice",
|
|
73
|
+
"charts", "sparkline", "bar_chart", "gauge", "histogram", "heatmap",
|
|
74
|
+
"menu", "select", "multiselect", "tabs",
|
|
75
|
+
"anim", "ease", "tween", "lerp", "lerp_color", "Transition", "EASINGS",
|
|
76
|
+
"ease_in_quad", "ease_out_quad", "ease_in_out_quad",
|
|
77
|
+
"ease_in_cubic", "ease_out_cubic", "ease_in_out_cubic",
|
|
78
|
+
"ease_in_quart", "ease_out_quart", "ease_in_out_sine",
|
|
79
|
+
"ease_in_expo", "ease_out_expo",
|
|
80
|
+
"ease_out_back", "ease_out_elastic", "ease_out_bounce",
|
|
81
|
+
"particles", "ParticleCanvas", "ParticleSystem",
|
|
82
|
+
"Rain", "Snow", "Stars", "Dust", "Matrix", "Bubbles", "Fireflies",
|
|
83
|
+
"play_particles", "play_preset", "PARTICLE_PRESETS",
|
|
84
|
+
"effects", "typewriter_fx", "fade_in", "wave", "shimmer",
|
|
85
|
+
"glitch", "marquee", "neon",
|
|
86
|
+
"Live", "animate_to",
|
|
87
|
+
# 0.4.0
|
|
88
|
+
"terminal_mod", "Terminal", "terminal",
|
|
89
|
+
"console_themes", "Palette", "THEMES", "get_theme", "list_themes",
|
|
90
|
+
"banner_mod", "big_text",
|
|
91
|
+
"forms_mod", "Form", "Field",
|
|
92
|
+
"wizard_mod", "Wizard", "Step",
|
|
93
|
+
"markdown_mod", "render_markdown", "print_md",
|
|
94
|
+
"progress_ext", "FancyProgressBar", "AnimatedProgressBar", "TaskList",
|
|
95
|
+
]
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"""Easing, tween, интерполяция — для плавных консольных анимаций."""
|
|
2
|
+
import math
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# ---------- easing ----------
|
|
6
|
+
|
|
7
|
+
def linear(t): return t
|
|
8
|
+
def ease_in_quad(t): return t * t
|
|
9
|
+
def ease_out_quad(t): return 1 - (1 - t) ** 2
|
|
10
|
+
def ease_in_out_quad(t): return 2 * t * t if t < 0.5 else 1 - (-2 * t + 2) ** 2 / 2
|
|
11
|
+
def ease_in_cubic(t): return t ** 3
|
|
12
|
+
def ease_out_cubic(t): return 1 - (1 - t) ** 3
|
|
13
|
+
def ease_in_out_cubic(t): return 4 * t ** 3 if t < 0.5 else 1 - (-2 * t + 2) ** 3 / 2
|
|
14
|
+
def ease_in_quart(t): return t ** 4
|
|
15
|
+
def ease_out_quart(t): return 1 - (1 - t) ** 4
|
|
16
|
+
def ease_in_out_sine(t): return -(math.cos(math.pi * t) - 1) / 2
|
|
17
|
+
def ease_in_expo(t): return 0 if t == 0 else 2 ** (10 * t - 10)
|
|
18
|
+
def ease_out_expo(t): return 1 if t == 1 else 1 - 2 ** (-10 * t)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def ease_out_back(t):
|
|
22
|
+
c1, c3 = 1.70158, 2.70158
|
|
23
|
+
return 1 + c3 * (t - 1) ** 3 + c1 * (t - 1) ** 2
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def ease_out_elastic(t):
|
|
27
|
+
if t in (0.0, 1.0):
|
|
28
|
+
return t
|
|
29
|
+
c4 = (2 * math.pi) / 3
|
|
30
|
+
return 2 ** (-10 * t) * math.sin((t * 10 - 0.75) * c4) + 1
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def ease_out_bounce(t):
|
|
34
|
+
n1, d1 = 7.5625, 2.75
|
|
35
|
+
if t < 1 / d1:
|
|
36
|
+
return n1 * t * t
|
|
37
|
+
if t < 2 / d1:
|
|
38
|
+
t -= 1.5 / d1
|
|
39
|
+
return n1 * t * t + 0.75
|
|
40
|
+
if t < 2.5 / d1:
|
|
41
|
+
t -= 2.25 / d1
|
|
42
|
+
return n1 * t * t + 0.9375
|
|
43
|
+
t -= 2.625 / d1
|
|
44
|
+
return n1 * t * t + 0.984375
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
EASINGS = {
|
|
48
|
+
"linear": linear,
|
|
49
|
+
"in_quad": ease_in_quad, "out_quad": ease_out_quad, "in_out_quad": ease_in_out_quad,
|
|
50
|
+
"in_cubic": ease_in_cubic, "out_cubic": ease_out_cubic, "in_out_cubic": ease_in_out_cubic,
|
|
51
|
+
"in_quart": ease_in_quart, "out_quart": ease_out_quart,
|
|
52
|
+
"in_out_sine": ease_in_out_sine,
|
|
53
|
+
"in_expo": ease_in_expo, "out_expo": ease_out_expo,
|
|
54
|
+
"out_back": ease_out_back, "out_elastic": ease_out_elastic, "out_bounce": ease_out_bounce,
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def ease(t, kind="out_cubic"):
|
|
59
|
+
return EASINGS.get(kind, ease_out_cubic)(max(0.0, min(1.0, t)))
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def tween(duration=1.0, fps=30, kind="out_cubic"):
|
|
63
|
+
"""Генератор значений 0..1 (с плавным easing)."""
|
|
64
|
+
n = max(int(duration * fps), 1)
|
|
65
|
+
for i in range(n + 1):
|
|
66
|
+
yield ease(i / n, kind)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def lerp(a, b, t):
|
|
70
|
+
return a + (b - a) * t
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _hex_to_rgb(h):
|
|
74
|
+
h = h.lstrip("#")
|
|
75
|
+
if len(h) == 3:
|
|
76
|
+
h = "".join(c * 2 for c in h)
|
|
77
|
+
return tuple(int(h[i:i + 2], 16) for i in (0, 2, 4))
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def _rgb_to_hex(rgb):
|
|
81
|
+
return "#{:02x}{:02x}{:02x}".format(*(max(0, min(255, int(c))) for c in rgb))
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def lerp_color(c1, c2, t):
|
|
85
|
+
"""c1, c2 — hex-строки, возвращает hex."""
|
|
86
|
+
a, b = _hex_to_rgb(c1), _hex_to_rgb(c2)
|
|
87
|
+
return _rgb_to_hex((a[i] + (b[i] - a[i]) * t for i in range(3)))
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class Transition:
|
|
91
|
+
"""Плавно переводит число из текущего значения в целевое."""
|
|
92
|
+
|
|
93
|
+
def __init__(self, value=0.0, kind="out_cubic"):
|
|
94
|
+
self.value = value
|
|
95
|
+
self.target = value
|
|
96
|
+
self.start = value
|
|
97
|
+
self.kind = kind
|
|
98
|
+
self._t = 0.0
|
|
99
|
+
self._duration = 0.0
|
|
100
|
+
|
|
101
|
+
def to(self, target, duration=0.5, kind=None):
|
|
102
|
+
self.start = self.value
|
|
103
|
+
self.target = target
|
|
104
|
+
self._duration = max(duration, 1e-6)
|
|
105
|
+
self._t = 0.0
|
|
106
|
+
if kind:
|
|
107
|
+
self.kind = kind
|
|
108
|
+
return self
|
|
109
|
+
|
|
110
|
+
def step(self, dt):
|
|
111
|
+
if self._duration <= 0:
|
|
112
|
+
self.value = self.target
|
|
113
|
+
return self.value
|
|
114
|
+
self._t = min(self._t + dt / self._duration, 1.0)
|
|
115
|
+
self.value = lerp(self.start, self.target, ease(self._t, self.kind))
|
|
116
|
+
return self.value
|
|
117
|
+
|
|
118
|
+
@property
|
|
119
|
+
def done(self):
|
|
120
|
+
return self._t >= 1.0
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""Большие ASCII-заголовки (минимальный FIGlet-подобный рендер)."""
|
|
2
|
+
from .colors import colorize, gradient_text
|
|
3
|
+
|
|
4
|
+
# 5-строчные глифы (только заглавные + цифры + базовые знаки).
|
|
5
|
+
_FONT = {
|
|
6
|
+
"A": [" ▄▀█ ", " █▀█ ", " ▀ ▀ "],
|
|
7
|
+
"B": [" █▀▄ ", " █▀▄ ", " ▀▀ "],
|
|
8
|
+
"C": [" █▀▀ ", " █ ", " ▀▀▀ "],
|
|
9
|
+
"D": [" █▀▄ ", " █ █ ", " ▀▀ "],
|
|
10
|
+
"E": [" █▀▀ ", " █▀ ", " ▀▀▀ "],
|
|
11
|
+
"F": [" █▀▀ ", " █▀ ", " ▀ "],
|
|
12
|
+
"G": [" █▀▀ ", " █ █ ", " ▀▀▀ "],
|
|
13
|
+
"H": [" █ █ ", " █▀█ ", " ▀ ▀ "],
|
|
14
|
+
"I": [" █ ", " █ ", " ▀ "],
|
|
15
|
+
"J": [" █ ", " █ ", " ▀▀ "],
|
|
16
|
+
"K": [" █ █ ", " █▀▄ ", " ▀ ▀ "],
|
|
17
|
+
"L": [" █ ", " █ ", " ▀▀▀ "],
|
|
18
|
+
"M": [" █▀▄▀█ ", " █ ▀ █ ", " ▀ ▀ "],
|
|
19
|
+
"N": [" █▄ █ ", " █ ▀█ ", " ▀ ▀ "],
|
|
20
|
+
"O": [" █▀█ ", " █ █ ", " ▀▀▀ "],
|
|
21
|
+
"P": [" █▀█ ", " █▀▀ ", " ▀ "],
|
|
22
|
+
"Q": [" █▀█ ", " █ █ ", " ▀▀▀▄ "],
|
|
23
|
+
"R": [" █▀▄ ", " █▀▄ ", " ▀ ▀ "],
|
|
24
|
+
"S": [" █▀▀ ", " ▀▀█ ", " ▀▀▀ "],
|
|
25
|
+
"T": [" █▀█ ", " █ ", " ▀ "],
|
|
26
|
+
"U": [" █ █ ", " █ █ ", " ▀▀▀ "],
|
|
27
|
+
"V": [" █ █ ", " █ █ ", " ▀ "],
|
|
28
|
+
"W": [" █ █ █ ", " █ █ █ ", " ▀ ▀ "],
|
|
29
|
+
"X": [" █ █ ", " █ ", " ▀ ▀ "],
|
|
30
|
+
"Y": [" █ █ ", " █ ", " ▀ "],
|
|
31
|
+
"Z": [" ▀▀█ ", " ▄▀ ", " ▀▀▀ "],
|
|
32
|
+
"0": [" █▀█ ", " █ █ ", " ▀▀▀ "],
|
|
33
|
+
"1": [" ▄█ ", " █ ", " ▀▀▀ "],
|
|
34
|
+
"2": [" █▀█ ", " ▄▀ ", " ▀▀▀ "],
|
|
35
|
+
"3": [" ▀▀█ ", " ▀▀█ ", " ▀▀▀ "],
|
|
36
|
+
"4": [" █ █ ", " ▀▀█ ", " ▀ "],
|
|
37
|
+
"5": [" █▀▀ ", " ▀▀▄ ", " ▀▀▀ "],
|
|
38
|
+
"6": [" █▀▀ ", " █▀▄ ", " ▀▀▀ "],
|
|
39
|
+
"7": [" ▀▀█ ", " █ ", " ▀ "],
|
|
40
|
+
"8": [" █▀█ ", " █▀█ ", " ▀▀▀ "],
|
|
41
|
+
"9": [" █▀█ ", " ▀▀█ ", " ▀▀▀ "],
|
|
42
|
+
" ": [" ", " ", " "],
|
|
43
|
+
"!": [" █ ", " █ ", " ▀ "],
|
|
44
|
+
"?": [" █▀█ ", " ▄▀ ", " ▀ "],
|
|
45
|
+
".": [" ", " ", " ▀ "],
|
|
46
|
+
",": [" ", " ", " ▀ "],
|
|
47
|
+
"-": [" ", " ▀▀▀ ", " "],
|
|
48
|
+
"_": [" ", " ", " ▀▀▀ "],
|
|
49
|
+
":": [" ", " ▀ ", " ▀ "],
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
_TEMPLATES = {
|
|
53
|
+
"block": ["▄▀█", "█▀█", "▀ ▀"], # не используется напрямую, но идея та же
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _render(text):
|
|
58
|
+
text = text.upper()
|
|
59
|
+
lines = ["", "", ""]
|
|
60
|
+
for ch in text:
|
|
61
|
+
glyph = _FONT.get(ch, _FONT["?"])
|
|
62
|
+
w = max(len(g) for g in glyph)
|
|
63
|
+
for i, g in enumerate(glyph):
|
|
64
|
+
lines[i] += g.ljust(w) + " "
|
|
65
|
+
return [l.rstrip() for l in lines]
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def big(text, fg=None, gradient=None, align="left", width=None):
|
|
69
|
+
"""Крупный заголовок. Если передан gradient=(start_hex, end_hex) —
|
|
70
|
+
каждая строка окрашивается градиентом."""
|
|
71
|
+
lines = _render(text)
|
|
72
|
+
if width:
|
|
73
|
+
from .text import align as _a
|
|
74
|
+
lines = [_a(l, width, align) for l in lines]
|
|
75
|
+
if gradient:
|
|
76
|
+
return "\n".join(gradient_text(l, gradient[0], gradient[1])
|
|
77
|
+
for l in lines)
|
|
78
|
+
if fg:
|
|
79
|
+
return "\n".join(colorize(l, fg=fg) for l in lines)
|
|
80
|
+
return "\n".join(lines)
|