tkfluent 0.1.2__py3-none-any.whl → 0.1.3__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 +2 -2
- tkflu/button.py +188 -92
- tkflu/bwm.py +10 -7
- tkflu/demos/grad2.py +1 -1
- tkflu/frame.py +11 -11
- tkflu/image.py +4 -0
- tkflu/label.py +8 -6
- tkflu/menubar.py +24 -17
- tkflu/text.py +34 -2
- tkflu/thememanager.py +4 -3
- tkflu/togglebutton.py +76 -70
- tkflu/tooltip.py +11 -6
- {tkfluent-0.1.2.dist-info → tkfluent-0.1.3.dist-info}/METADATA +13 -5
- {tkfluent-0.1.2.dist-info → tkfluent-0.1.3.dist-info}/RECORD +16 -16
- {tkfluent-0.1.2.dist-info → tkfluent-0.1.3.dist-info}/WHEEL +0 -0
tkflu/__init__.py
CHANGED
tkflu/__main__.py
CHANGED
@@ -2,9 +2,9 @@ from tkflu import *
|
|
2
2
|
from tkinter import *
|
3
3
|
from tkinter.font import *
|
4
4
|
|
5
|
-
|
5
|
+
purple_primary_color()
|
6
6
|
set_animation_steps(10)
|
7
|
-
set_animation_step_time(
|
7
|
+
set_animation_step_time(10)
|
8
8
|
|
9
9
|
def togglestate():
|
10
10
|
if button1.dcget("state") == NORMAL:
|
tkflu/button.py
CHANGED
@@ -4,13 +4,39 @@ from tkdeft.windows.drawwidget import DDrawWidget
|
|
4
4
|
|
5
5
|
from .designs.button import button
|
6
6
|
|
7
|
+
from typing import Union
|
8
|
+
|
7
9
|
|
8
10
|
class FluButtonDraw(DSvgDraw):
|
9
11
|
def create_roundrect(self,
|
10
|
-
x1, y1,
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
x1: Union[int, float], y1: Union[int, float], x2: Union[int, float], y2: Union[int, float],
|
13
|
+
radius: Union[int, float], radiusy: Union[int, float] = None, temppath: Union[str, None] = None,
|
14
|
+
fill: Union[str, tuple]="transparent", fill_opacity: Union[int, float]=1,
|
15
|
+
outline: Union[str, tuple] = "black", outline2: Union[str, tuple] = None,
|
16
|
+
outline_opacity: Union[int, float] = 1, outline2_opacity: Union[int, float] = 1, width: Union[int, float] = 1,
|
17
|
+
) -> str:
|
18
|
+
"""
|
19
|
+
用于生成svg圆角矩形图片,图片默认将会保存至临时文件夹。
|
20
|
+
|
21
|
+
Parameters:
|
22
|
+
x1: 第一个x轴的坐标
|
23
|
+
y1: 第一个y轴的坐标
|
24
|
+
x2: 第二个x轴的坐标,与x1连起来
|
25
|
+
y2: 第二个y轴的坐标,与y1连起来
|
26
|
+
radius: 圆角大小
|
27
|
+
radiusy: 圆角大小(y轴方向),如果不设置,将默认为参数radius的值
|
28
|
+
temppath: 临时文件地址,如果你不知道,就别设置
|
29
|
+
fill: 背景颜色
|
30
|
+
fill_opacity: 背景透明度
|
31
|
+
outline: 边框颜色
|
32
|
+
outline2: 边框颜色2(渐变),如果取了这个值,边框将会变为渐变,从左到右,outline为第一个渐变色,outline2为第二个渐变色
|
33
|
+
outline_opacity: 边框透明度
|
34
|
+
outline2_opacity: 第二个边框渐变颜色的透明度,如果outline没有设置,则这个值不会被用到
|
35
|
+
width: 边框宽度
|
36
|
+
|
37
|
+
Returns:
|
38
|
+
svg图片保存地址
|
39
|
+
"""
|
14
40
|
if radiusy:
|
15
41
|
_rx = radius
|
16
42
|
_ry = radiusy
|
@@ -19,9 +45,9 @@ class FluButtonDraw(DSvgDraw):
|
|
19
45
|
drawing = self.create_drawing(x2 - x1, y2 - y1, temppath=temppath)
|
20
46
|
if outline2:
|
21
47
|
border = drawing[1].linearGradient(start=(x1, y1), end=(x1, y2), id="DButton.Border",
|
22
|
-
gradientUnits="userSpaceOnUse")
|
23
|
-
border.add_stop_color("0.9", outline, outline_opacity)
|
24
|
-
border.add_stop_color("1", outline2, outline2_opacity)
|
48
|
+
gradientUnits="userSpaceOnUse") # 渐变色配置
|
49
|
+
border.add_stop_color("0.9", outline, outline_opacity) # 第一个渐变色的位置、第一个渐变色、第一个渐变色的透明度
|
50
|
+
border.add_stop_color("1", outline2, outline2_opacity) # 第二个渐变色的位置、第二个渐变色、第二个渐变色的透明度
|
25
51
|
drawing[1].defs.add(border)
|
26
52
|
stroke = f"url(#{border.get_id()})"
|
27
53
|
stroke_opacity = 1
|
@@ -41,41 +67,80 @@ class FluButtonDraw(DSvgDraw):
|
|
41
67
|
|
42
68
|
|
43
69
|
class FluButtonCanvas(DCanvas):
|
44
|
-
|
70
|
+
|
71
|
+
draw = FluButtonDraw # 设置svg绘图引擎
|
45
72
|
|
46
73
|
def create_round_rectangle(self,
|
47
|
-
x1, y1,
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
74
|
+
x1: Union[int, float], y1: Union[int, float], x2: Union[int, float], y2: Union[int, float],
|
75
|
+
r1: Union[int, float], r2: Union[int, float] = None, temppath: Union[str, None] = None,
|
76
|
+
fill: Union[str, tuple]="transparent", fill_opacity: Union[int, float] = 1,
|
77
|
+
outline: Union[str, tuple] = "black", outline2: Union[str, tuple] = "black",
|
78
|
+
outline_opacity: Union[int, float] = 1, outline2_opacity: Union[int, float] = 1,
|
79
|
+
width: Union[int, float] = 1, *args, **kwargs
|
80
|
+
) -> int:
|
81
|
+
"""
|
82
|
+
在画布上创建个圆角矩形
|
83
|
+
|
84
|
+
Parameters:
|
85
|
+
x1: 第一个x轴的坐标
|
86
|
+
y1: 第一个y轴的坐标
|
87
|
+
x2: 第二个x轴的坐标,与x1连起来
|
88
|
+
y2: 第二个y轴的坐标,与y1连起来
|
89
|
+
r1: 圆角大小
|
90
|
+
r2: 圆角大小(y轴方向),如果不设置,将默认为参数r1的值
|
91
|
+
temppath: 临时文件地址,如果你不知道,就别设置
|
92
|
+
fill: 背景颜色
|
93
|
+
fill_opacity: 背景透明度
|
94
|
+
outline: 边框颜色
|
95
|
+
outline2: 边框颜色2(渐变),如果取了这个值,边框将会变为渐变,从左到右,outline为第一个渐变色,outline2为第二个渐变色
|
96
|
+
outline_opacity: 边框透明度
|
97
|
+
outline2_opacity: 第二个边框渐变颜色的透明度,如果outline没有设置,则这个值不会被用到
|
98
|
+
width: 边框宽度
|
99
|
+
|
100
|
+
Returns: svg图片保存地址
|
101
|
+
"""
|
52
102
|
self._img = self.svgdraw.create_roundrect(
|
53
103
|
x1, y1, x2, y2, r1, r2, temppath=temppath,
|
54
104
|
fill=fill, fill_opacity=fill_opacity,
|
55
105
|
outline=outline, outline2=outline2, outline_opacity=outline_opacity, outline2_opacity=outline2_opacity,
|
56
106
|
width=width,
|
57
|
-
)
|
58
|
-
self._tkimg = self.svgdraw.create_tksvg_image(self._img)
|
59
|
-
return self.create_image(x1, y1, anchor="nw", image=self._tkimg)
|
107
|
+
) # 创建个svg圆角矩形图片
|
108
|
+
self._tkimg = self.svgdraw.create_tksvg_image(self._img) # 用tksvg读取svg图片
|
109
|
+
return self.create_image(x1, y1, anchor="nw", image=self._tkimg, *args, **kwargs) # 在画布上创建个以svg图片为图片的元件
|
60
110
|
|
61
|
-
create_roundrect = create_round_rectangle
|
111
|
+
create_roundrect = create_round_rectangle # 缩写
|
62
112
|
|
63
113
|
|
64
114
|
from .constants import MODE, STATE, BUTTONSTYLE
|
65
115
|
from .tooltip import FluToolTipBase
|
66
116
|
from .designs.gradient import FluGradient
|
117
|
+
from tkinter import Event
|
118
|
+
from tkinter.font import Font
|
67
119
|
|
68
120
|
class FluButton(FluButtonCanvas, DDrawWidget, FluToolTipBase, FluGradient):
|
69
121
|
def __init__(self, *args,
|
70
|
-
text="",
|
71
|
-
width=120,
|
72
|
-
height=32,
|
73
|
-
command=None,
|
74
|
-
font=None,
|
122
|
+
text: Union[str, int, float]= "",
|
123
|
+
width: Union[int, float] = 120,
|
124
|
+
height: Union[int, float] = 32,
|
125
|
+
command: callable = None,
|
126
|
+
font: Union[Font, tuple] = None,
|
75
127
|
mode: MODE = "light",
|
76
128
|
style: BUTTONSTYLE = "standard",
|
77
129
|
state: STATE = "normal",
|
78
|
-
**kwargs):
|
130
|
+
**kwargs) -> None:
|
131
|
+
"""
|
132
|
+
按钮组件
|
133
|
+
|
134
|
+
Parameters:
|
135
|
+
text: 按钮的标签文本
|
136
|
+
width: 默认宽带
|
137
|
+
height: 默认高度
|
138
|
+
command: 点击时出发的事件
|
139
|
+
font: 自定义标签字体
|
140
|
+
mode: 按钮深浅主题,参考tkflu.constants.MODE
|
141
|
+
style: 按钮样式,参考tkflu.constants.BUTTONSTYLE
|
142
|
+
state: 按钮的状态,参考tkflu.constants.STATE
|
143
|
+
"""
|
79
144
|
self._init(mode, style)
|
80
145
|
|
81
146
|
super().__init__(*args, width=width, height=height, **kwargs)
|
@@ -101,6 +166,14 @@ class FluButton(FluButtonCanvas, DDrawWidget, FluToolTipBase, FluGradient):
|
|
101
166
|
|
102
167
|
def _init(self, mode: MODE, style: BUTTONSTYLE):
|
103
168
|
|
169
|
+
"""
|
170
|
+
初始化按钮,正常情况下无需在程序中调用
|
171
|
+
|
172
|
+
Parameters:
|
173
|
+
mode: 按钮深浅主题,参考tkflu.constants.MODE
|
174
|
+
style: 按钮样式,参考tkflu.constants.BUTTONSTYLE
|
175
|
+
"""
|
176
|
+
|
104
177
|
from easydict import EasyDict
|
105
178
|
|
106
179
|
self.enter = False
|
@@ -122,13 +195,17 @@ class FluButton(FluButtonCanvas, DDrawWidget, FluToolTipBase, FluGradient):
|
|
122
195
|
|
123
196
|
self.theme(mode=mode, style=style)
|
124
197
|
|
125
|
-
def _draw(self, event=None, tempcolor: dict = None):
|
198
|
+
def _draw(self, event: Union[Event, None] = None, tempcolor: Union[dict, None] = None):
|
199
|
+
"""
|
200
|
+
|
201
|
+
Parameters:
|
202
|
+
绘制按钮
|
203
|
+
"""
|
126
204
|
super()._draw(event)
|
127
205
|
|
128
206
|
width = self.winfo_width()
|
129
207
|
height = self.winfo_height()
|
130
|
-
|
131
|
-
self.delete("all")
|
208
|
+
# 提前定义,反正多次调用浪费资源
|
132
209
|
|
133
210
|
state = self.dcget("state")
|
134
211
|
|
@@ -166,6 +243,9 @@ class FluButton(FluButtonCanvas, DDrawWidget, FluToolTipBase, FluGradient):
|
|
166
243
|
_radius = tempcolor.radius
|
167
244
|
_text_color = tempcolor.text_color
|
168
245
|
|
246
|
+
if hasattr(self, "element_border"):
|
247
|
+
self.delete(self.element_border)
|
248
|
+
|
169
249
|
self.element_border = self.create_round_rectangle(
|
170
250
|
0, 0, width, height, _radius, temppath=self.temppath,
|
171
251
|
fill=_back_color, fill_opacity=_back_opacity,
|
@@ -174,10 +254,15 @@ class FluButton(FluButtonCanvas, DDrawWidget, FluToolTipBase, FluGradient):
|
|
174
254
|
width=_border_width,
|
175
255
|
)
|
176
256
|
|
177
|
-
self
|
178
|
-
self.
|
179
|
-
|
180
|
-
|
257
|
+
if hasattr(self, "element_text"):
|
258
|
+
self.itemconfigure(self.element_text, fill=_text_color, text=self.attributes.text, font=self.attributes.font)
|
259
|
+
self.coords(self.element_text, width / 2, height / 2)
|
260
|
+
else:
|
261
|
+
self.element_text = self.create_text(
|
262
|
+
width / 2, height / 2, anchor="center",
|
263
|
+
fill=_text_color, text=self.attributes.text, font=self.attributes.font
|
264
|
+
)
|
265
|
+
self.tag_raise(self.element_text, self.element_border)
|
181
266
|
|
182
267
|
self.update()
|
183
268
|
|
@@ -186,7 +271,17 @@ class FluButton(FluButtonCanvas, DDrawWidget, FluToolTipBase, FluGradient):
|
|
186
271
|
self.mode = mode
|
187
272
|
if style:
|
188
273
|
self.style = style
|
189
|
-
|
274
|
+
theme_handlers = {
|
275
|
+
("light", "accent"): self._light_accent,
|
276
|
+
("light", "menu"): self._light_menu,
|
277
|
+
("light", "standard"): self._light,
|
278
|
+
("dark", "accent"): self._dark_accent,
|
279
|
+
("dark", "menu"): self._dark_menu,
|
280
|
+
("dark", "standard"): self._dark,
|
281
|
+
}
|
282
|
+
handler = theme_handlers.get((self.mode.lower(), self.style.lower()))
|
283
|
+
handler()
|
284
|
+
"""if self.mode.lower() == "dark":
|
190
285
|
if self.style.lower() == "accent":
|
191
286
|
self._dark_accent()
|
192
287
|
elif self.style.lower() == "menu":
|
@@ -199,9 +294,9 @@ class FluButton(FluButtonCanvas, DDrawWidget, FluToolTipBase, FluGradient):
|
|
199
294
|
elif self.style.lower() == "menu":
|
200
295
|
self._light_menu()
|
201
296
|
else:
|
202
|
-
self._light()
|
297
|
+
self._light()"""
|
203
298
|
|
204
|
-
def _theme(self, mode, style, animation_steps: int = None, animation_step_time: int = None):
|
299
|
+
def _theme(self, mode: MODE, style: BUTTONSTYLE, animation_steps: int = None, animation_step_time: int = None):
|
205
300
|
if animation_steps is None:
|
206
301
|
from .designs.animation import get_animation_steps
|
207
302
|
animation_steps = get_animation_steps()
|
@@ -212,66 +307,67 @@ class FluButton(FluButtonCanvas, DDrawWidget, FluToolTipBase, FluGradient):
|
|
212
307
|
h = button(mode, style, "hover")
|
213
308
|
p = button(mode, style, "pressed")
|
214
309
|
d = button(mode, style, "disabled")
|
215
|
-
if
|
216
|
-
if self.
|
217
|
-
if self.
|
218
|
-
|
310
|
+
if not animation_steps == 0 or not animation_step_time == 0:
|
311
|
+
if self.dcget("state") == "normal":
|
312
|
+
if self.enter:
|
313
|
+
if self.button1:
|
314
|
+
now = p
|
315
|
+
else:
|
316
|
+
now = h
|
219
317
|
else:
|
220
|
-
now =
|
318
|
+
now = r
|
221
319
|
else:
|
222
|
-
now =
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
self.
|
230
|
-
|
231
|
-
|
232
|
-
self.attributes.rest.
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
self.
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
self.
|
272
|
-
|
273
|
-
self.after(i * animation_step_time, update)
|
274
|
-
#self.after(animation_steps * animation_step_time + 10, lambda: self._draw(None, None))
|
320
|
+
now = d
|
321
|
+
#print(animation_step_time)
|
322
|
+
#print(type(animation_step_time))
|
323
|
+
if hasattr(self.attributes.rest, "back_color"):
|
324
|
+
back_colors = self.generate_hex2hex(
|
325
|
+
self.attributes.rest.back_color, now["back_color"], animation_steps
|
326
|
+
)
|
327
|
+
border_colors = self.generate_hex2hex(
|
328
|
+
self.attributes.rest.border_color, now["border_color"], animation_steps
|
329
|
+
)
|
330
|
+
if self.attributes.rest.border_color2 is None:
|
331
|
+
self.attributes.rest.border_color2 = self.attributes.rest.border_color
|
332
|
+
if now["border_color2"] is None:
|
333
|
+
now["border_color2"] = now["border_color"]
|
334
|
+
border_colors2 = self.generate_hex2hex(
|
335
|
+
self.attributes.rest.border_color2, now["border_color2"], animation_steps
|
336
|
+
)
|
337
|
+
text_colors = self.generate_hex2hex(
|
338
|
+
self.attributes.rest.text_color, now["text_color"], animation_steps
|
339
|
+
)
|
340
|
+
import numpy as np
|
341
|
+
back_opacitys = np.linspace(
|
342
|
+
float(self.attributes.rest.back_opacity), float(now["back_opacity"]), animation_steps).tolist()
|
343
|
+
border_color_opacitys = np.linspace(
|
344
|
+
float(self.attributes.rest.border_color_opacity), float(now["border_color_opacity"]), animation_steps).tolist()
|
345
|
+
if self.attributes.rest.border_color2_opacity is None:
|
346
|
+
self.attributes.rest.border_color2_opacity = self.attributes.rest.border_color_opacity
|
347
|
+
if now["border_color2_opacity"] is None:
|
348
|
+
now["border_color2_opacity"] = now["border_color_opacity"]
|
349
|
+
border_color2_opacitys = np.linspace(
|
350
|
+
float(self.attributes.rest.border_color2_opacity), float(now["border_color2_opacity"]), animation_steps).tolist()
|
351
|
+
for i in range(animation_steps):
|
352
|
+
def update(ii=i):
|
353
|
+
from easydict import EasyDict
|
354
|
+
tempcolor = EasyDict(
|
355
|
+
{
|
356
|
+
"back_color": back_colors[ii],
|
357
|
+
"back_opacity": back_opacitys[ii],
|
358
|
+
"border_color": border_colors[ii],
|
359
|
+
"border_color_opacity": str(border_color_opacitys[ii]),
|
360
|
+
"border_color2": border_colors2[ii],
|
361
|
+
"border_color2_opacity": str(border_color2_opacitys[ii]),
|
362
|
+
"border_width": 1,
|
363
|
+
"text_color": text_colors[ii],
|
364
|
+
"radius": 6,
|
365
|
+
}
|
366
|
+
)
|
367
|
+
self._draw(None, tempcolor)
|
368
|
+
|
369
|
+
self.after(i * animation_step_time, update)
|
370
|
+
#self.after(animation_steps * animation_step_time + 10, lambda: self._draw(None, None))
|
275
371
|
|
276
372
|
self.dconfigure(
|
277
373
|
rest={
|
@@ -341,7 +437,7 @@ class FluButton(FluButtonCanvas, DDrawWidget, FluToolTipBase, FluGradient):
|
|
341
437
|
def invoke(self):
|
342
438
|
self.attributes.command()
|
343
439
|
|
344
|
-
def _event_off_button1(self, event=None):
|
440
|
+
def _event_off_button1(self, event: Event = None):
|
345
441
|
self.button1 = False
|
346
442
|
|
347
443
|
self._draw(event)
|
tkflu/bwm.py
CHANGED
@@ -137,14 +137,15 @@ class BWm(FluGradient):
|
|
137
137
|
if animation_step_time is None:
|
138
138
|
from .designs.animation import get_animation_step_time
|
139
139
|
animation_step_time = get_animation_step_time()
|
140
|
-
if
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
140
|
+
if not animation_steps == 0 or not animation_step_time == 0:
|
141
|
+
if self.dcget("back_color"):
|
142
|
+
back_colors = self.generate_hex2hex(self.dcget("back_color"), n["back_color"], steps=animation_steps)
|
143
|
+
for i in range(animation_steps):
|
144
|
+
def update(ii=i): # 使用默认参数立即捕获i的值
|
145
|
+
self.dconfigure(back_color=back_colors[ii])
|
146
|
+
self._draw()
|
146
147
|
|
147
|
-
|
148
|
+
self.after(i * animation_step_time, update) # 直接传递函数,不需要lambda
|
148
149
|
|
149
150
|
self.dconfigure(
|
150
151
|
back_color=n["back_color"],
|
@@ -186,6 +187,8 @@ class BWm(FluGradient):
|
|
186
187
|
if platform == "win32":
|
187
188
|
if way == 0:
|
188
189
|
from .customwindow import CustomWindow
|
190
|
+
import warnings
|
191
|
+
warnings.warn("This is EXPERIMENTAL! Please consider way=1 in production.")
|
189
192
|
self.customwindow = CustomWindow(self, wait=wait)
|
190
193
|
self.customwindow.bind_drag(self.titlebar)
|
191
194
|
self.customwindow.bind_drag(self.titlelabel)
|
tkflu/demos/grad2.py
CHANGED
tkflu/frame.py
CHANGED
@@ -189,17 +189,17 @@ class FluFrame(Frame, DObject, FluGradient):
|
|
189
189
|
if animation_step_time is None:
|
190
190
|
from .designs.animation import get_animation_step_time
|
191
191
|
animation_step_time = get_animation_step_time()
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
192
|
+
if not animation_steps == 0 or not animation_step_time == 0:
|
193
|
+
if hasattr(self.attributes, "back_color") and hasattr(n, "back_color"):
|
194
|
+
back_colors = self.generate_hex2hex(self.attributes.back_color, n["back_color"], steps=animation_steps)
|
195
|
+
for i in range(animation_steps):
|
196
|
+
def update(ii=i): # 使用默认参数立即捕获i的值
|
197
|
+
print(back_colors[ii])
|
198
|
+
self._draw(tempcolor=back_colors[ii])
|
199
|
+
self.update()
|
200
|
+
|
201
|
+
self.after(i * animation_step_time, update) # 直接传递函数,不需要lambda
|
202
|
+
self.after(animation_steps * animation_step_time + 10, lambda: self._draw())
|
203
203
|
self.dconfigure(
|
204
204
|
back_color=n["back_color"],
|
205
205
|
border_color=n["border_color"],
|
tkflu/image.py
CHANGED
tkflu/label.py
CHANGED
@@ -41,17 +41,19 @@ class FluLabel(DDrawWidget, FluToolTipBase, FluGradient):
|
|
41
41
|
def _draw(self, event=None, tempcolor=None):
|
42
42
|
super()._draw(event)
|
43
43
|
|
44
|
-
self.delete("all")
|
45
|
-
|
46
44
|
if tempcolor:
|
47
45
|
_text_color = tempcolor
|
48
46
|
else:
|
49
47
|
_text_color = self.attributes.text_color
|
50
48
|
|
51
|
-
|
52
|
-
self.
|
53
|
-
|
54
|
-
|
49
|
+
if not hasattr(self, "element_text"):
|
50
|
+
self.element_text = self.create_text(
|
51
|
+
self.winfo_width() / 2, self.winfo_height() / 2, anchor="center",
|
52
|
+
fill=_text_color, text=self.attributes.text, font=self.attributes.font
|
53
|
+
)
|
54
|
+
else:
|
55
|
+
self.coords(self.element_text, self.winfo_width() / 2, self.winfo_height() / 2)
|
56
|
+
self.itemconfigure(self.element_text, fill=_text_color, text=self.attributes.text, font=self.attributes.font)
|
55
57
|
|
56
58
|
def theme(self, mode="light", animation_steps: int = None, animation_step_time: int = None):
|
57
59
|
from .designs.label import label
|
tkflu/menubar.py
CHANGED
@@ -141,24 +141,31 @@ class FluMenuBar(Frame, DObject, FluGradient):
|
|
141
141
|
m = menubar(mode)
|
142
142
|
self.mode = mode
|
143
143
|
if hasattr(self, "tk"):
|
144
|
-
if
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
144
|
+
if not animation_steps == 0 or not animation_step_time == 0:
|
145
|
+
if mode.lower() == "dark":
|
146
|
+
back_colors = self.generate_hex2hex(self.attributes.back_color, m["back_color"], steps=animation_steps)
|
147
|
+
for i in range(animation_steps):
|
148
|
+
def update(ii=i): # 使用默认参数立即捕获i的值
|
149
|
+
self.dconfigure(back_color=back_colors[ii])
|
150
|
+
self._draw()
|
151
|
+
|
152
|
+
self.after(i * animation_step_time, update) # 直接传递函数,不需要lambda
|
153
|
+
else:
|
154
|
+
back_colors = self.generate_hex2hex(self.attributes.back_color, m["back_color"], steps=animation_steps)
|
155
|
+
for i in range(animation_steps):
|
156
|
+
def update(ii=i): # 使用默认参数立即捕获i的值
|
157
|
+
self.dconfigure(back_color=back_colors[ii])
|
158
|
+
self._draw()
|
159
|
+
|
160
|
+
self.after(i * animation_step_time, update) # 直接传递函数,不需要lambda
|
161
|
+
|
162
|
+
self.after(animation_steps * animation_step_time + 50, lambda: self.update_children())
|
152
163
|
else:
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
self.after(i * animation_step_time, update) # 直接传递函数,不需要lambda
|
160
|
-
|
161
|
-
self.after(animation_steps * animation_step_time + 50, lambda: self.update_children())
|
164
|
+
if mode.lower() == "dark":
|
165
|
+
self.dconfigure(back_color=m["back_color"])
|
166
|
+
else:
|
167
|
+
self.dconfigure(back_color=m["back_color"])
|
168
|
+
self._draw()
|
162
169
|
|
163
170
|
def _draw(self, event=None):
|
164
171
|
self.config(background=self.attributes.back_color)
|
tkflu/text.py
CHANGED
@@ -172,6 +172,8 @@ class FluText(FluTextCanvas, DDrawWidget, FluToolTipBase):
|
|
172
172
|
height=self.winfo_height() - _border_width * 2 - _radius
|
173
173
|
)
|
174
174
|
|
175
|
+
if hasattr(self, "element_border"):
|
176
|
+
self.delete(self.element_border)
|
175
177
|
self.element_border = self.create_round_rectangle(
|
176
178
|
0, 0, width, height, _radius, temppath=self.temppath,
|
177
179
|
fill=_back_color, fill_opacity=_back_opacity, stop1=_stop1, stop2=_stop2,
|
@@ -179,20 +181,50 @@ class FluText(FluTextCanvas, DDrawWidget, FluToolTipBase):
|
|
179
181
|
outline2_opacity=_border_color2_opacity,
|
180
182
|
width=_border_width
|
181
183
|
)
|
182
|
-
|
184
|
+
"""if _underline_fill:
|
185
|
+
if not hasattr(self, "element_line"):
|
186
|
+
self.element_line = self.create_line(
|
187
|
+
_radius / 3 + _border_width, self.winfo_height() - _radius / 3,
|
188
|
+
self.winfo_width() - _radius / 3 - _border_width * 2, self.winfo_height() - _radius / 3,
|
189
|
+
width=_underline_width, fill=_underline_fill
|
190
|
+
)
|
191
|
+
else:
|
192
|
+
self.coords(
|
193
|
+
self.element_line, _radius / 3 + _border_width, self.winfo_height() - _radius / 3,
|
194
|
+
self.winfo_width() - _radius / 3 - _border_width * 2, self.winfo_height() - _radius / 3,
|
195
|
+
)
|
196
|
+
self.itemconfigure(self.element_line, width=_underline_width, fill=_underline_fill)
|
197
|
+
"""
|
198
|
+
if hasattr(self, "element_line"):
|
199
|
+
self.delete(self.element_line)
|
183
200
|
if _underline_fill:
|
184
201
|
self.element_line = self.create_line(
|
185
202
|
_radius / 3 + _border_width, self.winfo_height() - _radius / 3,
|
186
203
|
self.winfo_width() - _radius / 3 - _border_width * 2, self.winfo_height() - _radius / 3,
|
187
204
|
width=_underline_width, fill=_underline_fill
|
188
205
|
)
|
189
|
-
|
206
|
+
"""
|
207
|
+
if not hasattr(self, "element_text"):
|
208
|
+
self.element_text = self.create_window(
|
209
|
+
self.winfo_width() / 2, self.winfo_height() / 2,
|
210
|
+
window=self.text,
|
211
|
+
width=self.winfo_width() - _border_width * 2 - _radius,
|
212
|
+
height=self.winfo_height() - _border_width * 2 - _radius
|
213
|
+
)
|
214
|
+
else:
|
215
|
+
self.coords(self.element_text, self.winfo_width() / 2, self.winfo_height() / 2,
|
216
|
+
self.winfo_width() - _border_width * 2 - _radius, self.winfo_height() - _border_width * 2 - _radius)
|
217
|
+
"""
|
218
|
+
if hasattr(self, "element_text"):
|
219
|
+
self.delete(self.element_text)
|
190
220
|
self.element_text = self.create_window(
|
191
221
|
self.winfo_width() / 2, self.winfo_height() / 2,
|
192
222
|
window=self.text,
|
193
223
|
width=self.winfo_width() - _border_width * 2 - _radius,
|
194
224
|
height=self.winfo_height() - _border_width * 2 - _radius
|
195
225
|
)
|
226
|
+
self.tag_raise(self.element_text, self.element_border)
|
227
|
+
self.tag_raise(self.element_line, self.element_border)
|
196
228
|
|
197
229
|
#self.tag_raise(self.element_text)
|
198
230
|
|
tkflu/thememanager.py
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
from .window import FluWindow
|
2
2
|
from .toplevel import FluToplevel
|
3
|
+
from typing import Union
|
3
4
|
|
4
5
|
|
5
6
|
class FluThemeManager(object):
|
6
|
-
def __init__(self, window=None, mode: str = "light", delay: int
|
7
|
+
def __init__(self, window=None, mode: str = "light", delay: Union[int, None] = 100):
|
7
8
|
if window:
|
8
9
|
self._window = window
|
9
10
|
else:
|
@@ -13,7 +14,7 @@ class FluThemeManager(object):
|
|
13
14
|
self.mode(self._mode)
|
14
15
|
self._window.after(delay, lambda: self.mode(self._mode))
|
15
16
|
|
16
|
-
def mode(self, mode: str, delay: int
|
17
|
+
def mode(self, mode: str, delay: Union[int, None] = 50):
|
17
18
|
def _():
|
18
19
|
self._mode = mode
|
19
20
|
if hasattr(self._window, "theme"):
|
@@ -43,7 +44,7 @@ class FluThemeManager(object):
|
|
43
44
|
#print(len(self._window.winfo_children()))
|
44
45
|
self._window.after(delay+len(self._window.winfo_children()), __)
|
45
46
|
|
46
|
-
def toggle(self, delay: int
|
47
|
+
def toggle(self, delay: Union[int, None] = None):
|
47
48
|
if self._mode == "light":
|
48
49
|
mode = "dark"
|
49
50
|
else:
|
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:
|
@@ -44,10 +45,12 @@ class FluToolTip(FluPopupWindow):
|
|
44
45
|
|
45
46
|
# 渐显动画
|
46
47
|
def fade_in(step=0):
|
47
|
-
|
48
|
+
FRAMES_COUNT = 20
|
49
|
+
alpha = step / FRAMES_COUNT # 按帧数变化,从0到1
|
48
50
|
self.wm_attributes("-alpha", alpha)
|
49
|
-
if step <
|
50
|
-
|
51
|
+
if step < FRAMES_COUNT:
|
52
|
+
# 每执行一次,增加一次透明度,间隔由帧数决定
|
53
|
+
self.after(int(round(self._show_time/FRAMES_COUNT)), lambda: fade_in(step + 1))
|
51
54
|
|
52
55
|
fade_in() # 启动动画
|
53
56
|
|
@@ -103,7 +106,7 @@ class FluToolTip2(FluPopupWindow):
|
|
103
106
|
self._widget.bind('<Leave>', self.hide, add="+")
|
104
107
|
self._widget.bind('<Motion>', self.move, add="+")
|
105
108
|
|
106
|
-
|
109
|
+
self.theme(mode)
|
107
110
|
|
108
111
|
def show(self, event: Event):
|
109
112
|
self.popup(
|
@@ -127,7 +130,9 @@ class FluToolTip2(FluPopupWindow):
|
|
127
130
|
self.configure(
|
128
131
|
background=n["back_color"]
|
129
132
|
)
|
130
|
-
|
133
|
+
|
134
|
+
if sys.platform == "win32": # Only Windows supports the transparentcolor attribute
|
135
|
+
self.wm_attributes("-transparentcolor", n["back_color"])
|
131
136
|
#print(n["back_color"])
|
132
137
|
if hasattr(self, "_frame"):
|
133
138
|
self._frame.dconfigure(
|
@@ -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.3
|
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.0.9)
|
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=QCVBJeyYGwtiMvS8wArcJrW8KL169w7wwXEBkjloGeM,3303
|
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
|
@@ -35,24 +35,24 @@ tkflu/designs/text.py,sha256=YMJR2eGE7lFIZPYrT7p8QBD3zRH4NaVWhrL1dOb6vJ4,5059
|
|
35
35
|
tkflu/designs/tooltip.py,sha256=OFUIO9-EMNjapF9zC5PuLW26HFGib-p800hNIxaWT5Q,442
|
36
36
|
tkflu/designs/window.py,sha256=XHMvT0lVsJSeUApMf_bf9ipLSWT-BirkOiiUnVx-N48,625
|
37
37
|
tkflu/entry.py,sha256=b4kblEEmZRqtuDM2E5_hhb_8MhTgujbwTNP7aICB6qM,10852
|
38
|
-
tkflu/frame.py,sha256=
|
38
|
+
tkflu/frame.py,sha256=oMy6fZcDfoYEZsGnKw23wlMAlojckavs7X6JbB8OQpw,11631
|
39
39
|
tkflu/icons.py,sha256=Xzrc9WzexncYEPXqnVg3ywWv_7kLZLyYC5WtaRv30PQ,7129
|
40
|
-
tkflu/image.py,sha256=
|
41
|
-
tkflu/label.py,sha256=
|
40
|
+
tkflu/image.py,sha256=w5CbUBsn5KG8EekLwMyXC5T0w6E_dlP8tlKjnut9194,58
|
41
|
+
tkflu/label.py,sha256=pt_xmL5cdrVwOMDGdbGdQKCwiCnsGp3OpMAG57Ow8Mw,2824
|
42
42
|
tkflu/listbox.py,sha256=gD_oNNWVZtm5qXQ8bVBNRqJL6CGiIYtvhxztM9huzew,9991
|
43
43
|
tkflu/litenav.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
44
44
|
tkflu/menu.py,sha256=j15DzZuWGsG_xMvsDh7XfO-aV6zlF9AhzHN2rdjwQLU,3263
|
45
|
-
tkflu/menubar.py,sha256=
|
45
|
+
tkflu/menubar.py,sha256=MrqUzH5Znv92IkDGnZa4MEYZkH9ynfMzPNdx0JpQQwU,6145
|
46
46
|
tkflu/popupmenu.py,sha256=dRwuFK7PKSYXiLhzrrzjKXTjtLfr7vh0KDvJIUjDetg,1592
|
47
47
|
tkflu/popupwindow.py,sha256=OVDjW3g5oKeFy82SLz7XiNC2hy8RKeQGW2l0yBKezIs,1010
|
48
48
|
tkflu/scrollbar.py,sha256=1hbu5n1mx4KyiF_M3sohpJJPux1zu5Jlw9V6LfQQs1Y,7293
|
49
49
|
tkflu/slider.py,sha256=B29fNA0rGSWEdetFfwLEdNhYyprHEm9FCqU3Vpp08Sw,16114
|
50
|
-
tkflu/text.py,sha256=
|
51
|
-
tkflu/thememanager.py,sha256=
|
52
|
-
tkflu/togglebutton.py,sha256=
|
53
|
-
tkflu/tooltip.py,sha256=
|
50
|
+
tkflu/text.py,sha256=OpGySgIpATrSR95cyhE-OTbtkBmQ3Eqqlw8DqVtioXI,12725
|
51
|
+
tkflu/thememanager.py,sha256=2Vrkg0OEeTpwz0WU89IQCuN6VfhoUjI_N8vwth-W20A,1938
|
52
|
+
tkflu/togglebutton.py,sha256=WWx6iFuNzvv8_1ujXEN2MwoHgo3itZHnVpeQeO6gqqQ,20355
|
53
|
+
tkflu/tooltip.py,sha256=JDSqa2Q4kJmlnY5fu9kR0dlcexwvQoscomiaxw7BGQg,5163
|
54
54
|
tkflu/toplevel.py,sha256=dPrnhHTiciJtrlsh5oZNuv77Q-YCRK6OgQQ0mrhfTeo,1382
|
55
55
|
tkflu/window.py,sha256=2LjgL2KZIAYA04fXWQvfiNMYj_PKzlpSuEZrR94qHAs,1483
|
56
|
-
tkfluent-0.1.
|
57
|
-
tkfluent-0.1.
|
58
|
-
tkfluent-0.1.
|
56
|
+
tkfluent-0.1.3.dist-info/METADATA,sha256=GomtMRLj71TsxHwvOo4oE8rHH7WGBHGk0WlPr2QOZ_M,38223
|
57
|
+
tkfluent-0.1.3.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
58
|
+
tkfluent-0.1.3.dist-info/RECORD,,
|
File without changes
|