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/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 uncheck.pressed.border_color2 is None:
405
- uncheck.pressed.border_color2 = uncheck.pressed.border_color
406
- if check.pressed.border_color2 is None:
407
- check.pressed.border_color2 = check.pressed.border_color
408
- if uncheck.pressed.border_color2_opacity is None:
409
- uncheck.pressed.border_color2_opacity = uncheck.pressed.border_color_opacity
410
- if check.pressed.border_color2_opacity is None:
411
- check.pressed.border_color2_opacity = check.pressed.border_color_opacity
412
- if self.attributes.checked:
413
- self.attributes.checked = False
414
- back_colors = self.generate_hex2hex(
415
- check.pressed.back_color, uncheck.rest.back_color, steps
416
- )
417
- border_colors = self.generate_hex2hex(
418
- check.pressed.border_color, uncheck.rest.border_color, steps
419
- )
420
- border_colors2 = self.generate_hex2hex(
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._draw(None, tempcolor)
472
- self.after(i*animation_step_time, update)
473
- self.after(steps*animation_step_time+10, lambda: self._draw(None, None))
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
- #self.theme(mode)
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
- alpha = step / 10 # 分10步从0到1
44
+ FRAMES_COUNT = 20
45
+ alpha = step / FRAMES_COUNT # 按帧数变化,从0到1
48
46
  self.wm_attributes("-alpha", alpha)
49
- if step < 10:
50
- self.after(int(round(self._show_time/10)), lambda: fade_in(step + 1)) # 每50ms增加一次透明度
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
- #self.theme(mode)
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.2
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,UI,interface
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 (>=2.3.1,<3.0.0)
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 (>=0.0.9,<0.0.10)
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
  ![Light.png](https://img.picui.cn/free/2025/06/22/6857e613bc150.png)
45
45
  ![Dark.png](https://img.picui.cn/free/2025/06/22/6857e613b7fc2.png)
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=rw-h1nnCEP1mr_K9A7yAMdK5PS1yZRx3ha4q9AiYPlY,988
2
- tkflu/__main__.py,sha256=o7f_U4B2BvffR0XuUSKsEzS7xVsf6T6ifroxImH8-KE,3303
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=ai5CuSSRdR8q4C7P8ngAyVCQij1uM75M2TCKaTwVhqI,13932
5
- tkflu/bwm.py,sha256=jKGzvvmMHWn5y7GNrsMmcxIpM5j5v3zwxkpnMpsrYLk,8009
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=U2PI1942CvfNGWXJ8WztW9LOg6tHIFcGrJNKfMl4Pf4,442
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/slider.py,sha256=1JsWvE8tQ6oI3vfS7iDMlES17n6ri8q9D2ym456i5CY,7800
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=XN2yTxzbwwQPiWj3RpCI5ndkYE7LEMWNlNbQaXE9L2U,11527
39
+ tkflu/frame.py,sha256=oMy6fZcDfoYEZsGnKw23wlMAlojckavs7X6JbB8OQpw,11631
39
40
  tkflu/icons.py,sha256=Xzrc9WzexncYEPXqnVg3ywWv_7kLZLyYC5WtaRv30PQ,7129
40
- tkflu/image.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- tkflu/label.py,sha256=sfLeYJP20604h8bgUKjbo7WnOJs-q41rTm1Tl3sMxec,2560
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=gm5zaNKM8_jbJ3SLJQZFJcOcR6-WAFG1MPKVyCO35j4,5765
46
+ tkflu/menubar.py,sha256=MrqUzH5Znv92IkDGnZa4MEYZkH9ynfMzPNdx0JpQQwU,6145
46
47
  tkflu/popupmenu.py,sha256=dRwuFK7PKSYXiLhzrrzjKXTjtLfr7vh0KDvJIUjDetg,1592
47
- tkflu/popupwindow.py,sha256=OVDjW3g5oKeFy82SLz7XiNC2hy8RKeQGW2l0yBKezIs,1010
48
+ tkflu/popupwindow.py,sha256=OaQn727VpbX_TL9oUEOGudNL18eN1RVXC_owiWINBzg,2401
48
49
  tkflu/scrollbar.py,sha256=1hbu5n1mx4KyiF_M3sohpJJPux1zu5Jlw9V6LfQQs1Y,7293
49
- tkflu/slider.py,sha256=B29fNA0rGSWEdetFfwLEdNhYyprHEm9FCqU3Vpp08Sw,16114
50
- tkflu/text.py,sha256=OIh79R0NAJdle4aSsIxzdPhBNqiAw15FqtdEip-kU9s,10891
51
- tkflu/thememanager.py,sha256=xf8zIriAyGWzmSD-e1D7igW3uWvSZkIVoPi3YJ3Brj8,1897
52
- tkflu/togglebutton.py,sha256=ZOGJbZRs_vcw9s7rOuaGblKSpOCaj-ws7ZcX9vRMhZo,19831
53
- tkflu/tooltip.py,sha256=Cjid4E9yFFPBZwOz5uVhSb8kpEEW26Wv8vxiqc0bnw4,4917
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.2.dist-info/METADATA,sha256=lvU3Vw-ZIcpsOpBqgjX3LKnHAfKoD4MWxRcLxJlgqhs,37953
57
- tkfluent-0.1.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
58
- tkfluent-0.1.2.dist-info/RECORD,,
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,,