tkfluent 0.1.2__py3-none-any.whl → 0.1.4__py3-none-any.whl
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.
- tkflu/__init__.py +3 -1
- tkflu/__main__.py +8 -5
- tkflu/button.py +188 -92
- tkflu/bwm.py +10 -7
- tkflu/demos/grad2.py +1 -1
- tkflu/designs/scrollbar.py +56 -0
- tkflu/designs/slider.py +16 -0
- tkflu/frame.py +11 -11
- tkflu/image.py +4 -0
- tkflu/label.py +8 -6
- tkflu/menubar.py +24 -17
- tkflu/popupwindow.py +34 -1
- tkflu/slider.py +156 -87
- tkflu/text.py +34 -2
- tkflu/thememanager.py +14 -13
- tkflu/togglebutton.py +76 -70
- tkflu/tooltip.py +9 -9
- {tkfluent-0.1.2.dist-info → tkfluent-0.1.4.dist-info}/METADATA +13 -5
- {tkfluent-0.1.2.dist-info → tkfluent-0.1.4.dist-info}/RECORD +20 -19
- {tkfluent-0.1.2.dist-info → tkfluent-0.1.4.dist-info}/WHEEL +0 -0
tkflu/togglebutton.py
CHANGED
@@ -398,76 +398,82 @@ class FluToggleButton(FluToggleButtonCanvas, DDrawWidget, FluToolTipBase, FluGra
|
|
398
398
|
if animation_step_time is None:
|
399
399
|
from .designs.animation import get_animation_step_time
|
400
400
|
animation_step_time = get_animation_step_time()
|
401
|
-
steps = animation_steps
|
402
401
|
check = self.attributes.check
|
403
402
|
uncheck = self.attributes.uncheck
|
404
|
-
if
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
check.pressed.border_color2, uncheck.rest.border_color2, steps
|
422
|
-
)
|
423
|
-
text_colors = self.generate_hex2hex(
|
424
|
-
check.pressed.text_color, uncheck.rest.text_color, steps
|
425
|
-
)
|
426
|
-
import numpy as np
|
427
|
-
back_opacitys = np.linspace(
|
428
|
-
float(check.pressed.back_opacity), float(uncheck.rest.back_opacity), steps).tolist()
|
429
|
-
border_color_opacitys = np.linspace(
|
430
|
-
float(check.pressed.border_color_opacity), float(uncheck.rest.border_color_opacity), steps).tolist()
|
431
|
-
border_color2_opacitys = np.linspace(
|
432
|
-
float(check.pressed.border_color2_opacity), float(uncheck.rest.border_color2_opacity), steps).tolist()
|
433
|
-
else:
|
434
|
-
self.attributes.checked = True
|
435
|
-
back_colors = self.generate_hex2hex(
|
436
|
-
uncheck.pressed.back_color, check.rest.back_color, steps
|
437
|
-
)
|
438
|
-
border_colors = self.generate_hex2hex(
|
439
|
-
uncheck.pressed.back_color, check.rest.back_color, steps
|
440
|
-
)
|
441
|
-
border_colors2 = self.generate_hex2hex(
|
442
|
-
uncheck.pressed.border_color2, check.rest.border_color2, steps
|
443
|
-
)
|
444
|
-
text_colors = self.generate_hex2hex(
|
445
|
-
uncheck.pressed.text_color, check.rest.text_color, steps
|
446
|
-
)
|
447
|
-
import numpy as np
|
448
|
-
back_opacitys = np.linspace(float(uncheck.pressed.back_opacity), float(check.rest.back_opacity),
|
449
|
-
steps).tolist()
|
450
|
-
border_color_opacitys = np.linspace(float(uncheck.pressed.border_color_opacity), float(check.rest.border_color_opacity),
|
451
|
-
steps).tolist()
|
452
|
-
border_color2_opacitys = np.linspace(float(uncheck.pressed.border_color2_opacity),
|
453
|
-
float(check.rest.border_color2_opacity),
|
454
|
-
steps).tolist()
|
455
|
-
for i in range(steps):
|
456
|
-
def update(ii=i):
|
457
|
-
from easydict import EasyDict
|
458
|
-
tempcolor = EasyDict(
|
459
|
-
{
|
460
|
-
"back_color": back_colors[ii],
|
461
|
-
"back_opacity": back_opacitys[ii],
|
462
|
-
"border_color": border_colors[ii],
|
463
|
-
"border_color_opacity": str(border_color_opacitys[ii]),
|
464
|
-
"border_color2": border_colors2[ii],
|
465
|
-
"border_color2_opacity": str(border_color2_opacitys[ii]),
|
466
|
-
"border_width": 1,
|
467
|
-
"text_color": text_colors[ii],
|
468
|
-
"radius": 6,
|
469
|
-
}
|
403
|
+
if not animation_steps == 0 or not animation_step_time == 0:
|
404
|
+
steps = animation_steps
|
405
|
+
if uncheck.pressed.border_color2 is None:
|
406
|
+
uncheck.pressed.border_color2 = uncheck.pressed.border_color
|
407
|
+
if check.pressed.border_color2 is None:
|
408
|
+
check.pressed.border_color2 = check.pressed.border_color
|
409
|
+
if uncheck.pressed.border_color2_opacity is None:
|
410
|
+
uncheck.pressed.border_color2_opacity = uncheck.pressed.border_color_opacity
|
411
|
+
if check.pressed.border_color2_opacity is None:
|
412
|
+
check.pressed.border_color2_opacity = check.pressed.border_color_opacity
|
413
|
+
if self.attributes.checked:
|
414
|
+
self.attributes.checked = False
|
415
|
+
back_colors = self.generate_hex2hex(
|
416
|
+
check.pressed.back_color, uncheck.rest.back_color, steps
|
417
|
+
)
|
418
|
+
border_colors = self.generate_hex2hex(
|
419
|
+
check.pressed.border_color, uncheck.rest.border_color, steps
|
470
420
|
)
|
471
|
-
self.
|
472
|
-
|
473
|
-
|
421
|
+
border_colors2 = self.generate_hex2hex(
|
422
|
+
check.pressed.border_color2, uncheck.rest.border_color2, steps
|
423
|
+
)
|
424
|
+
text_colors = self.generate_hex2hex(
|
425
|
+
check.pressed.text_color, uncheck.rest.text_color, steps
|
426
|
+
)
|
427
|
+
import numpy as np
|
428
|
+
back_opacitys = np.linspace(
|
429
|
+
float(check.pressed.back_opacity), float(uncheck.rest.back_opacity), steps).tolist()
|
430
|
+
border_color_opacitys = np.linspace(
|
431
|
+
float(check.pressed.border_color_opacity), float(uncheck.rest.border_color_opacity), steps).tolist()
|
432
|
+
border_color2_opacitys = np.linspace(
|
433
|
+
float(check.pressed.border_color2_opacity), float(uncheck.rest.border_color2_opacity), steps).tolist()
|
434
|
+
else:
|
435
|
+
self.attributes.checked = True
|
436
|
+
back_colors = self.generate_hex2hex(
|
437
|
+
uncheck.pressed.back_color, check.rest.back_color, steps
|
438
|
+
)
|
439
|
+
border_colors = self.generate_hex2hex(
|
440
|
+
uncheck.pressed.back_color, check.rest.back_color, steps
|
441
|
+
)
|
442
|
+
border_colors2 = self.generate_hex2hex(
|
443
|
+
uncheck.pressed.border_color2, check.rest.border_color2, steps
|
444
|
+
)
|
445
|
+
text_colors = self.generate_hex2hex(
|
446
|
+
uncheck.pressed.text_color, check.rest.text_color, steps
|
447
|
+
)
|
448
|
+
import numpy as np
|
449
|
+
back_opacitys = np.linspace(float(uncheck.pressed.back_opacity), float(check.rest.back_opacity),
|
450
|
+
steps).tolist()
|
451
|
+
border_color_opacitys = np.linspace(float(uncheck.pressed.border_color_opacity), float(check.rest.border_color_opacity),
|
452
|
+
steps).tolist()
|
453
|
+
border_color2_opacitys = np.linspace(float(uncheck.pressed.border_color2_opacity),
|
454
|
+
float(check.rest.border_color2_opacity),
|
455
|
+
steps).tolist()
|
456
|
+
for i in range(steps):
|
457
|
+
def update(ii=i):
|
458
|
+
from easydict import EasyDict
|
459
|
+
tempcolor = EasyDict(
|
460
|
+
{
|
461
|
+
"back_color": back_colors[ii],
|
462
|
+
"back_opacity": back_opacitys[ii],
|
463
|
+
"border_color": border_colors[ii],
|
464
|
+
"border_color_opacity": str(border_color_opacitys[ii]),
|
465
|
+
"border_color2": border_colors2[ii],
|
466
|
+
"border_color2_opacity": str(border_color2_opacitys[ii]),
|
467
|
+
"border_width": 1,
|
468
|
+
"text_color": text_colors[ii],
|
469
|
+
"radius": 6,
|
470
|
+
}
|
471
|
+
)
|
472
|
+
self._draw(None, tempcolor)
|
473
|
+
self.after(i*animation_step_time, update)
|
474
|
+
self.after(steps*animation_step_time+10, lambda: self._draw(None, None))
|
475
|
+
else:
|
476
|
+
if self.attributes.checked:
|
477
|
+
self.attributes.checked = False
|
478
|
+
else:
|
479
|
+
self.attributes.checked = True
|
tkflu/tooltip.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
from .popupwindow import FluPopupWindow
|
2
2
|
from tkinter import Event, Widget
|
3
|
+
import sys
|
3
4
|
|
4
5
|
|
5
6
|
class FluToolTip(FluPopupWindow):
|
@@ -26,7 +27,7 @@ class FluToolTip(FluPopupWindow):
|
|
26
27
|
self._widget.bind('<Enter>', self.enter, add="+")
|
27
28
|
self._widget.bind('<Leave>', self.leave, add="+")
|
28
29
|
|
29
|
-
|
30
|
+
self.theme(mode)
|
30
31
|
|
31
32
|
def enter(self, event: Event):
|
32
33
|
def check() -> None:
|
@@ -39,15 +40,13 @@ class FluToolTip(FluPopupWindow):
|
|
39
40
|
self.wm_attributes("-alpha", 0.0)
|
40
41
|
self.deiconify()
|
41
42
|
|
42
|
-
# 设置初始透明度为0
|
43
|
-
|
44
|
-
|
45
|
-
# 渐显动画
|
46
43
|
def fade_in(step=0):
|
47
|
-
|
44
|
+
FRAMES_COUNT = 20
|
45
|
+
alpha = step / FRAMES_COUNT # 按帧数变化,从0到1
|
48
46
|
self.wm_attributes("-alpha", alpha)
|
49
|
-
if step <
|
50
|
-
|
47
|
+
if step < FRAMES_COUNT:
|
48
|
+
# 每执行一次,增加一次透明度,间隔由帧数决定
|
49
|
+
self.after(int(round(self._show_time/FRAMES_COUNT)), lambda: fade_in(step + 1))
|
51
50
|
|
52
51
|
fade_in() # 启动动画
|
53
52
|
|
@@ -103,7 +102,7 @@ class FluToolTip2(FluPopupWindow):
|
|
103
102
|
self._widget.bind('<Leave>', self.hide, add="+")
|
104
103
|
self._widget.bind('<Motion>', self.move, add="+")
|
105
104
|
|
106
|
-
|
105
|
+
self.theme(mode)
|
107
106
|
|
108
107
|
def show(self, event: Event):
|
109
108
|
self.popup(
|
@@ -127,6 +126,7 @@ class FluToolTip2(FluPopupWindow):
|
|
127
126
|
self.configure(
|
128
127
|
background=n["back_color"]
|
129
128
|
)
|
129
|
+
|
130
130
|
self.wm_attributes("-transparentcolor", n["back_color"])
|
131
131
|
#print(n["back_color"])
|
132
132
|
if hasattr(self, "_frame"):
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: tkfluent
|
3
|
-
Version: 0.1.
|
4
|
-
Summary: Fluent Design for Tkinter
|
3
|
+
Version: 0.1.4
|
4
|
+
Summary: Fluent(SunValley) Design for Tkinter. Modern GUI
|
5
5
|
License: GPL-3.0
|
6
|
-
Keywords: tkfluent,tksvg,tkinter,fluent,modern,
|
6
|
+
Keywords: tkfluent,tksvg,tkinter,fluent,modern,GUI,interface
|
7
7
|
Author: XiangQinxi
|
8
8
|
Author-email: xiangqinxi@outlook.com
|
9
9
|
Requires-Python: >=3.8,<4.0
|
@@ -27,10 +27,10 @@ Classifier: Programming Language :: Python :: 3.13
|
|
27
27
|
Classifier: Programming Language :: Tcl
|
28
28
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
29
29
|
Requires-Dist: easydict (>=1.13,<2.0)
|
30
|
-
Requires-Dist: numpy
|
30
|
+
Requires-Dist: numpy
|
31
31
|
Requires-Dist: pillow (>=10.2.0,<11.0.0)
|
32
32
|
Requires-Dist: svgwrite (>=1.4.3,<2.0.0)
|
33
|
-
Requires-Dist: tkdeft (
|
33
|
+
Requires-Dist: tkdeft (==0.1.0)
|
34
34
|
Requires-Dist: tkextrafont (>=0.6.3,<0.7.0)
|
35
35
|
Requires-Dist: tksvg (>=0.7.4,<0.8.0)
|
36
36
|
Project-URL: Documentation, https://tkfluent.netlify.app
|
@@ -44,10 +44,18 @@ Description-Content-Type: text/markdown
|
|
44
44
|

|
45
45
|

|
46
46
|
|
47
|
+
## 文档
|
48
|
+
请查阅[tkfluent文档网站](https://tkfluent.netlify.app/)。
|
49
|
+
使用`mkdocs`和`mkdocs-material`构建,由`netlify`部署
|
50
|
+
|
51
|
+
## 贡献者
|
52
|
+
1. [真_人工智障](https://github.com/TotoWang-hhh)
|
53
|
+
|
47
54
|
## 依赖图
|
48
55
|
```bash
|
49
56
|
PS .\tkfluent> poetry show --tree
|
50
57
|
easydict 1.13 Access dict values as attributes (works recursively).
|
58
|
+
numpy 1.24.4 Fundamental package for array computing in Python
|
51
59
|
pillow 10.4.0 Python Imaging Library (Fork)
|
52
60
|
svgwrite 1.4.3 A Python library to create SVG drawings.
|
53
61
|
tkdeft 0.0.9 使用tkinter+tksvg开发的现代化界面库
|
@@ -1,8 +1,8 @@
|
|
1
|
-
tkflu/__init__.py,sha256=
|
2
|
-
tkflu/__main__.py,sha256=
|
1
|
+
tkflu/__init__.py,sha256=2h8-989xFYDdt2BAxVn0_6jkfq96Hy-0MfZnjm4Bacc,1013
|
2
|
+
tkflu/__main__.py,sha256=sfvzp4Izqa229Tn9JAqg6aL2BTveXmzjBt8E1lEr1Js,3346
|
3
3
|
tkflu/badge.py,sha256=p9kY-JbsDraohNg2ZJMk3xA4PS9LEKxFpaSGX_NgHBw,5836
|
4
|
-
tkflu/button.py,sha256=
|
5
|
-
tkflu/bwm.py,sha256=
|
4
|
+
tkflu/button.py,sha256=N6wvcNNsqVf_Rb0c1ZOw3JpXqJcR9QJAFvjl2aaQXPw,19263
|
5
|
+
tkflu/bwm.py,sha256=6N4fLxnMIAFVXdNriBk-88-rmCVu0j245zAjYA6Bq-k,8233
|
6
6
|
tkflu/checkbox.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
7
|
tkflu/constants.py,sha256=VX3NcSzdOqelK3IRM-fK_RKBHV26d8AgJMuP-8hqCsA,488
|
8
8
|
tkflu/customwindow.py,sha256=Fr4CF0vKwj36tYzgX9_5F7OwcD59z9LfOW20Ugm2Hxc,3761
|
@@ -13,7 +13,7 @@ tkflu/demos/acrylic1.py,sha256=-1SniTxrQeAYz6VSxHu7UsAmZeSIBaElgC2KYVVAghU,423
|
|
13
13
|
tkflu/demos/demo1.py,sha256=xR4a1qOrzxHXhVFlluTjp9izo7sO_YFbS_BGZj1LbZs,112
|
14
14
|
tkflu/demos/designer.py,sha256=EI40war1G_XuXBrf9qKK0FJVGfS_WSsCwVBTSWxveeY,961
|
15
15
|
tkflu/demos/grad.py,sha256=neRGPq7VkGEzzUJymNdBi7EYI55wMes-OX3l-DQSonA,2195
|
16
|
-
tkflu/demos/grad2.py,sha256=
|
16
|
+
tkflu/demos/grad2.py,sha256=2ZixYVCaqWoWxTqYD4p6x9Sz7VUT3KCeQDNzOX0aAkI,442
|
17
17
|
tkflu/demos/grad3.py,sha256=vJQ70C0amAJMbDvudOvHBqwb59SuXoWDCk7QovFuFts,441
|
18
18
|
tkflu/demos/test.py,sha256=DMontyt61qq4ULVExSrHA9tbQlXHH_KSkQPv1EV8TEk,153
|
19
19
|
tkflu/demos/tooltip.py,sha256=_tTIUuVo8x9YpdikPLxTvbB3wF1vb-JKppVDgzHXj2k,286
|
@@ -30,29 +30,30 @@ tkflu/designs/gradient.py,sha256=f5_FiWfYYfQ_obAj1n2qtNKWvxfC1wCOIONozNa27xs,201
|
|
30
30
|
tkflu/designs/label.py,sha256=0uNOWxlGvpbeAh5NLb_ZTyyDTznW8i32rLXkVBkC19M,218
|
31
31
|
tkflu/designs/menubar.py,sha256=bi8OfDjJAhjRHPRfJmyVQcr7SZsScypdrCXEw8WxStA,215
|
32
32
|
tkflu/designs/primary_color.py,sha256=TKhGFX8jtFPQYmEV2f0Yq9jMuy0KG3ewTtsOBa1eds4,746
|
33
|
-
tkflu/designs/
|
33
|
+
tkflu/designs/scrollbar.py,sha256=DgnUnRs8lhE9X3VcvvOE5N2Z4SfyVAGs8cLe6g-XH94,1812
|
34
|
+
tkflu/designs/slider.py,sha256=UDi4sw4K9fe-FGvhl4Hhr4zqZtfOdSiCjhdKFQmw6Q0,8088
|
34
35
|
tkflu/designs/text.py,sha256=YMJR2eGE7lFIZPYrT7p8QBD3zRH4NaVWhrL1dOb6vJ4,5059
|
35
36
|
tkflu/designs/tooltip.py,sha256=OFUIO9-EMNjapF9zC5PuLW26HFGib-p800hNIxaWT5Q,442
|
36
37
|
tkflu/designs/window.py,sha256=XHMvT0lVsJSeUApMf_bf9ipLSWT-BirkOiiUnVx-N48,625
|
37
38
|
tkflu/entry.py,sha256=b4kblEEmZRqtuDM2E5_hhb_8MhTgujbwTNP7aICB6qM,10852
|
38
|
-
tkflu/frame.py,sha256=
|
39
|
+
tkflu/frame.py,sha256=oMy6fZcDfoYEZsGnKw23wlMAlojckavs7X6JbB8OQpw,11631
|
39
40
|
tkflu/icons.py,sha256=Xzrc9WzexncYEPXqnVg3ywWv_7kLZLyYC5WtaRv30PQ,7129
|
40
|
-
tkflu/image.py,sha256=
|
41
|
-
tkflu/label.py,sha256=
|
41
|
+
tkflu/image.py,sha256=w5CbUBsn5KG8EekLwMyXC5T0w6E_dlP8tlKjnut9194,58
|
42
|
+
tkflu/label.py,sha256=pt_xmL5cdrVwOMDGdbGdQKCwiCnsGp3OpMAG57Ow8Mw,2824
|
42
43
|
tkflu/listbox.py,sha256=gD_oNNWVZtm5qXQ8bVBNRqJL6CGiIYtvhxztM9huzew,9991
|
43
44
|
tkflu/litenav.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
44
45
|
tkflu/menu.py,sha256=j15DzZuWGsG_xMvsDh7XfO-aV6zlF9AhzHN2rdjwQLU,3263
|
45
|
-
tkflu/menubar.py,sha256=
|
46
|
+
tkflu/menubar.py,sha256=MrqUzH5Znv92IkDGnZa4MEYZkH9ynfMzPNdx0JpQQwU,6145
|
46
47
|
tkflu/popupmenu.py,sha256=dRwuFK7PKSYXiLhzrrzjKXTjtLfr7vh0KDvJIUjDetg,1592
|
47
|
-
tkflu/popupwindow.py,sha256=
|
48
|
+
tkflu/popupwindow.py,sha256=OaQn727VpbX_TL9oUEOGudNL18eN1RVXC_owiWINBzg,2401
|
48
49
|
tkflu/scrollbar.py,sha256=1hbu5n1mx4KyiF_M3sohpJJPux1zu5Jlw9V6LfQQs1Y,7293
|
49
|
-
tkflu/slider.py,sha256=
|
50
|
-
tkflu/text.py,sha256=
|
51
|
-
tkflu/thememanager.py,sha256=
|
52
|
-
tkflu/togglebutton.py,sha256=
|
53
|
-
tkflu/tooltip.py,sha256=
|
50
|
+
tkflu/slider.py,sha256=9SVtDxezB-iLDW7KVmIU5_EfGrAkUd_i8HSyALZkXeg,17925
|
51
|
+
tkflu/text.py,sha256=OpGySgIpATrSR95cyhE-OTbtkBmQ3Eqqlw8DqVtioXI,12725
|
52
|
+
tkflu/thememanager.py,sha256=N2aMX2CfMvXFYz0N8vi-9zHjxzvGumhDsKJJ0UgroAA,1914
|
53
|
+
tkflu/togglebutton.py,sha256=WWx6iFuNzvv8_1ujXEN2MwoHgo3itZHnVpeQeO6gqqQ,20355
|
54
|
+
tkflu/tooltip.py,sha256=BOXdKxiKZGp63JDSwC-2T2cCJkz2w_dmOos4oisiYr8,4986
|
54
55
|
tkflu/toplevel.py,sha256=dPrnhHTiciJtrlsh5oZNuv77Q-YCRK6OgQQ0mrhfTeo,1382
|
55
56
|
tkflu/window.py,sha256=2LjgL2KZIAYA04fXWQvfiNMYj_PKzlpSuEZrR94qHAs,1483
|
56
|
-
tkfluent-0.1.
|
57
|
-
tkfluent-0.1.
|
58
|
-
tkfluent-0.1.
|
57
|
+
tkfluent-0.1.4.dist-info/METADATA,sha256=ZCuGH-4ORVRLUozMA_U8ZzEgcfX7YTCOL-70BtnjnyY,38223
|
58
|
+
tkfluent-0.1.4.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
59
|
+
tkfluent-0.1.4.dist-info/RECORD,,
|
File without changes
|