tkfluent 0.0.4__py3-none-any.whl → 0.0.5__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 CHANGED
@@ -10,6 +10,7 @@ Fluent设计的tkinter组件库(模板)
10
10
  from .badge import FluBadge
11
11
  from .button import FluButton
12
12
  from .constants import *
13
+ from .defs import *
13
14
  from .entry import FluEntry
14
15
  from .frame import FluFrame
15
16
  from .label import FluLabel
@@ -23,8 +24,8 @@ from .togglebutton import FluToggleButton
23
24
  from .tooltip import FluToolTip
24
25
  from .toplevel import FluToplevel
25
26
  from .window import FluWindow
26
- #from .winico import FluWinico
27
27
 
28
+ from .designs import *
28
29
 
29
30
  FluChip = FluBadge
30
31
  FluPushButton = FluButton
tkflu/__main__.py CHANGED
@@ -2,6 +2,8 @@ from tkflu import *
2
2
  from tkinter import *
3
3
  from tkinter.font import *
4
4
 
5
+ orange_primary_color()
6
+
5
7
  root = FluWindow()
6
8
  #root.wincustom(way=0)
7
9
  root.wm_geometry("360x500")
@@ -40,7 +42,7 @@ menubar.add_cascade(
40
42
  label="FluMenu3", width=80, menu=menu2
41
43
  )
42
44
 
43
- menubar.pack(fill="x", )
45
+ menubar.pack(fill="x")
44
46
 
45
47
  frame = FluFrame(root)
46
48
 
@@ -60,23 +62,22 @@ button2 = FluButton(
60
62
  )
61
63
  button2.pack(fill="x", padx=5, pady=5)
62
64
 
63
-
64
- def toggle1():
65
- print(f"FluToggleButton -> Toggled -> Checked: {togglebutton1.dcget('checked')}")
66
- if togglebutton1.dcget('checked'):
67
- thememanager.mode("dark")
68
- else:
69
- thememanager.mode("light")
70
-
71
-
72
65
  togglebutton1 = FluToggleButton(
73
- frame, text="FluToggleButton", command=toggle1
66
+ frame, text="FluToggleButton", command=lambda: print(f"FluToggleButton -> Toggled -> Checked: {togglebutton1.dcget('checked')}")
74
67
  )
75
68
  togglebutton1.pack(fill="x", padx=5, pady=5)
76
69
 
70
+ togglebutton2 = FluToggleButton(
71
+ frame, text="Toggle Theme", command=lambda: toggle_theme(togglebutton2, thememanager)
72
+ )
73
+ togglebutton2.pack(fill="x", padx=5, pady=5)
74
+
77
75
  entry1 = FluEntry(frame)
78
76
  entry1.pack(fill="x", padx=5, pady=5)
79
77
 
78
+ entry2 = FluEntry(frame, height=50)
79
+ entry2.pack(fill="x", padx=5, pady=5)
80
+
80
81
  text1 = FluText(frame)
81
82
  text1.pack(fill="x", padx=5, pady=5)
82
83
 
tkflu/badge.py CHANGED
@@ -2,18 +2,30 @@ from tkdeft.windows.draw import DSvgDraw
2
2
  from tkdeft.windows.canvas import DCanvas
3
3
  from tkdeft.windows.drawwidget import DDrawWidget
4
4
 
5
+ from .designs.badge import badge
6
+
5
7
 
6
8
  class FluBadgeDraw(DSvgDraw):
7
9
  def create_roundrect(self,
8
10
  x1, y1, x2, y2, temppath=None,
9
- fill="transparent", outline="black", width=1
11
+ fill="transparent", fill_opacity=1,
12
+ outline="black", outline_opacity=1, width=1
10
13
  ):
11
14
  drawing = self.create_drawing(x2 - x1, y2 - y1, temppath=temppath)
12
15
  drawing[1].add(
13
16
  drawing[1].rect(
14
17
  (x1, y1), (x2 - x1, y2 - y1), 20, 25,
15
- fill=fill, stroke_width=width,
16
- stroke=outline,
18
+ id=".Badge", transform="translate(0.500000 0.500000)",
19
+ fill=fill, fill_opacity=fill_opacity,
20
+ stroke=outline, stroke_opacity=outline_opacity, stroke_width=width,
21
+ )
22
+ )
23
+ drawing[1].add(
24
+ drawing[1].rect(
25
+ (x1, y1), (x2 - x1, y2 - y1), 20, 25,
26
+ id=".Badge", transform="translate(0.500000 0.500000)",
27
+ fill="white", fill_opacity=0,
28
+ stroke=outline, stroke_opacity=outline_opacity, stroke_width=width,
17
29
  )
18
30
  )
19
31
  drawing[1].save()
@@ -25,11 +37,13 @@ class FluBadgeCanvas(DCanvas):
25
37
 
26
38
  def create_round_rectangle(self,
27
39
  x1, y1, x2, y2, temppath=None,
28
- fill="transparent", outline="black", width=1
40
+ fill="transparent", fill_opacity=1,
41
+ outline="black", outline_opacity=1, width=1
29
42
  ):
30
43
  self._img = self.svgdraw.create_roundrect(
31
44
  x1, y1, x2, y2, temppath=temppath,
32
- fill=fill, outline=outline, width=width
45
+ fill=fill, fill_opacity=fill_opacity,
46
+ outline=outline, outline_opacity=outline_opacity, width=width
33
47
  )
34
48
  self._tkimg = self.svgdraw.create_tksvg_image(self._img)
35
49
  return self.create_image(x1, y1, anchor="nw", image=self._tkimg)
@@ -72,9 +86,8 @@ class FluBadge(FluBadgeCanvas, DDrawWidget):
72
86
 
73
87
  self.bind("<<Clicked>>", lambda event=None: self.focus_set(), add="+")
74
88
 
75
- if font is None:
76
- from tkdeft.utility.fonts import SegoeFont
77
- self.attributes.font = SegoeFont()
89
+ from .defs import set_default_font
90
+ set_default_font(font, self.attributes)
78
91
 
79
92
  def _init(self, mode, style):
80
93
  from easydict import EasyDict
@@ -86,7 +99,9 @@ class FluBadge(FluBadgeCanvas, DDrawWidget):
86
99
  "font": None,
87
100
 
88
101
  "back_color": None,
102
+ "back_opacity": None,
89
103
  "border_color": None,
104
+ "border_color_opacity": None,
90
105
  "border_width": None,
91
106
  "text_color": None
92
107
  }
@@ -107,13 +122,16 @@ class FluBadge(FluBadgeCanvas, DDrawWidget):
107
122
  self.delete("all")
108
123
 
109
124
  _back_color = self.attributes.back_color
125
+ _back_opacity = self.attributes.back_opacity
110
126
  _border_color = self.attributes.border_color
127
+ _border_color_opacity = self.attributes.border_color_opacity
111
128
  _border_width = self.attributes.border_width
112
129
  _text_color = self.attributes.text_color
113
130
 
114
131
  self.element_border = self.create_round_rectangle(
115
132
  0, 0, self.winfo_width(), self.winfo_height(), temppath=self.temppath,
116
- fill=_back_color, outline=_border_color, width=_border_width
133
+ fill=_back_color, fill_opacity=_back_opacity,
134
+ outline=_border_color, outline_opacity=_border_color_opacity, width=_border_width
117
135
  )
118
136
 
119
137
  self.element_text = self.create_text(
@@ -137,34 +155,25 @@ class FluBadge(FluBadgeCanvas, DDrawWidget):
137
155
  else:
138
156
  self._light()
139
157
 
140
- def _light(self):
158
+ def _theme(self, mode, style):
159
+ n = badge(mode, style)
141
160
  self.dconfigure(
142
- back_color="#f9f9f9",
143
- border_color="#f0f0f0",
144
- border_width=1,
145
- text_color="#191919",
161
+ back_color=n["back_color"],
162
+ back_opacity=n["back_opacity"],
163
+ border_color=n["border_color"],
164
+ border_color_opacity=n["border_color_opacity"],
165
+ border_width=n["border_width"],
166
+ text_color=n["text_color"],
146
167
  )
147
168
 
169
+ def _light(self):
170
+ self._theme("light", "standard")
171
+
148
172
  def _light_accent(self):
149
- self.dconfigure(
150
- back_color="#005fb8",
151
- border_color="#005fb8",
152
- border_width=1,
153
- text_color="#ffffff",
154
- )
173
+ self._theme("light", "accent")
155
174
 
156
175
  def _dark(self):
157
- self.dconfigure(
158
- back_color="#242424",
159
- border_color="#242424",
160
- border_width=1,
161
- text_color="#ffffff",
162
- )
176
+ self._theme("dark", "standard")
163
177
 
164
178
  def _dark_accent(self):
165
- self.dconfigure(
166
- back_color="#60cdff",
167
- border_color="#60cdff",
168
- border_width=1,
169
- text_color="#000000",
170
- )
179
+ self._theme("dark", "accent")
tkflu/button.py CHANGED
@@ -2,13 +2,15 @@ from tkdeft.windows.draw import DSvgDraw
2
2
  from tkdeft.windows.canvas import DCanvas
3
3
  from tkdeft.windows.drawwidget import DDrawWidget
4
4
 
5
+ from .designs.button import button
6
+
5
7
 
6
8
  class FluButtonDraw(DSvgDraw):
7
- def create_roundrect_with_text(self,
8
- x1, y1, x2, y2, radius, radiusy=None, temppath=None,
9
- fill="transparent", fill_opacity=1,
10
- outline="black", outline2=None, outline_opacity=1, outline2_opacity=1, width=1,
11
- ):
9
+ def create_roundrect(self,
10
+ x1, y1, x2, y2, radius, radiusy=None, temppath=None,
11
+ fill="transparent", fill_opacity=1,
12
+ outline="black", outline2=None, outline_opacity=1, outline2_opacity=1, width=1,
13
+ ):
12
14
  if radiusy:
13
15
  _rx = radius
14
16
  _ry = radiusy
@@ -41,13 +43,13 @@ class FluButtonDraw(DSvgDraw):
41
43
  class FluButtonCanvas(DCanvas):
42
44
  draw = FluButtonDraw
43
45
 
44
- def create_round_rectangle_with_text(self,
45
- x1, y1, x2, y2, r1, r2=None, temppath=None,
46
- fill="transparent", fill_opacity=1,
47
- outline="black", outline2="black", outline_opacity=1, outline2_opacity=1,
48
- width=1,
49
- ):
50
- self._img = self.svgdraw.create_roundrect_with_text(
46
+ def create_round_rectangle(self,
47
+ x1, y1, x2, y2, r1, r2=None, temppath=None,
48
+ fill="transparent", fill_opacity=1,
49
+ outline="black", outline2="black", outline_opacity=1, outline2_opacity=1,
50
+ width=1,
51
+ ):
52
+ self._img = self.svgdraw.create_roundrect(
51
53
  x1, y1, x2, y2, r1, r2, temppath=temppath,
52
54
  fill=fill, fill_opacity=fill_opacity,
53
55
  outline=outline, outline2=outline2, outline_opacity=outline_opacity, outline2_opacity=outline2_opacity,
@@ -56,7 +58,7 @@ class FluButtonCanvas(DCanvas):
56
58
  self._tkimg = self.svgdraw.create_tksvg_image(self._img)
57
59
  return self.create_image(x1, y1, anchor="nw", image=self._tkimg)
58
60
 
59
- create_roundrect = create_round_rectangle_with_text
61
+ create_roundrect = create_round_rectangle
60
62
 
61
63
 
62
64
  class FluButton(FluButtonCanvas, DDrawWidget):
@@ -90,9 +92,8 @@ class FluButton(FluButtonCanvas, DDrawWidget):
90
92
 
91
93
  self.bind("<Return>", lambda event=None: self.attributes.command(), add="+") # 可以使用回车键模拟点击
92
94
 
93
- if font is None:
94
- from tkdeft.utility.fonts import SegoeFont
95
- self.attributes.font = SegoeFont()
95
+ from .defs import set_default_font
96
+ set_default_font(font, self.attributes)
96
97
 
97
98
  def _init(self, mode, style):
98
99
 
@@ -147,7 +148,7 @@ class FluButton(FluButtonCanvas, DDrawWidget):
147
148
  _radius = _dict.radius
148
149
  _text_color = _dict.text_color
149
150
 
150
- self.element_border = self.create_round_rectangle_with_text(
151
+ self.element_border = self.create_round_rectangle(
151
152
  0, 0, width, height, _radius, temppath=self.temppath,
152
153
  fill=_back_color, fill_opacity=_back_opacity,
153
154
  outline=_border_color, outline_opacity=_border_color_opacity, outline2=_border_color2,
@@ -180,293 +181,75 @@ class FluButton(FluButtonCanvas, DDrawWidget):
180
181
  else:
181
182
  self._light()
182
183
 
183
- def _light(self):
184
+ def _theme(self, mode, style):
185
+ r = button(mode, style, "rest")
186
+ h = button(mode, style, "hover")
187
+ p = button(mode, style, "pressed")
188
+ d = button(mode, style, "disabled")
184
189
  self.dconfigure(
185
190
  rest={
186
- "back_color": "#ffffff",
187
- "back_opacity": "0.7",
188
- "border_color": "#000000",
189
- "border_color_opacity": "0.2",
190
- "border_color2": "#000000",
191
- "border_color2_opacity": "0.3",
192
- "border_width": 1,
193
- "radius": 6,
194
- "text_color": "#000000",
191
+ "back_color": r["back_color"],
192
+ "back_opacity": r["back_opacity"],
193
+ "border_color": r["border_color"],
194
+ "border_color_opacity": r["border_color_opacity"],
195
+ "border_color2": r["border_color2"],
196
+ "border_color2_opacity": r["border_color2_opacity"],
197
+ "border_width": r["border_width"],
198
+ "radius": r["radius"],
199
+ "text_color": r["text_color"],
195
200
  },
196
201
  hover={
197
- "back_color": "#F9F9F9",
198
- "back_opacity": "0.5",
199
- "border_color": "#000000",
200
- "border_color_opacity": "0.1",
201
- "border_color2": "#000000",
202
- "border_color2_opacity": "0.2",
203
- "border_width": 1,
204
- "radius": 6,
205
- "text_color": "#000000",
202
+ "back_color": h["back_color"],
203
+ "back_opacity": h["back_opacity"],
204
+ "border_color": h["border_color"],
205
+ "border_color_opacity": h["border_color_opacity"],
206
+ "border_color2": h["border_color2"],
207
+ "border_color2_opacity": h["border_color2_opacity"],
208
+ "border_width": h["border_width"],
209
+ "radius": h["radius"],
210
+ "text_color": h["text_color"],
206
211
  },
207
212
  pressed={
208
- "back_color": "#F9F9F9",
209
- "back_opacity": "0.3",
210
- "border_color": "#000000",
211
- "border_color_opacity": "0.1",
212
- "border_color2": None,
213
- "border_color2_opacity": None,
214
- "border_width": 1,
215
- "radius": 6,
216
- "text_color": "#636363",
213
+ "back_color": p["back_color"],
214
+ "back_opacity": p["back_opacity"],
215
+ "border_color": p["border_color"],
216
+ "border_color_opacity": p["border_color_opacity"],
217
+ "border_color2": p["border_color2"],
218
+ "border_color2_opacity": p["border_color2_opacity"],
219
+ "border_width": p["border_width"],
220
+ "radius": p["radius"],
221
+ "text_color": p["text_color"],
217
222
  },
218
223
  disabled={
219
- "back_color": "#ffffff",
220
- "back_opacity": "1.000000",
221
- "border_color": "#000000",
222
- "border_color_opacity": "0.058824",
223
- "border_color2": "#000000",
224
- "border_color2_opacity": "0.160784",
225
- "border_width": 1,
226
- "radius": 6,
227
- "text_color": "#a2a2a2",
224
+ "back_color": d["back_color"],
225
+ "back_opacity": d["back_opacity"],
226
+ "border_color": d["border_color"],
227
+ "border_color_opacity": d["border_color_opacity"],
228
+ "border_color2": d["border_color2"],
229
+ "border_color2_opacity": d["border_color2_opacity"],
230
+ "border_width": d["border_width"],
231
+ "radius": d["radius"],
232
+ "text_color": d["text_color"],
228
233
  }
229
234
  )
230
235
 
236
+ def _light(self):
237
+ self._theme("light", "standard")
238
+
231
239
  def _light_menu(self):
232
- self.dconfigure(
233
- rest={
234
- "back_color": "#ffffff",
235
- "back_opacity": "0.7",
236
- "border_color": "#000000",
237
- "border_color_opacity": "0.2",
238
- "border_color2": "#000000",
239
- "border_color2_opacity": "0.3",
240
- "border_width": 0,
241
- "radius": 6,
242
- "text_color": "#000000",
243
- },
244
- hover={
245
- "back_color": "#F9F9F9",
246
- "back_opacity": "0.5",
247
- "border_color": "#000000",
248
- "border_color_opacity": "0.1",
249
- "border_color2": "#000000",
250
- "border_color2_opacity": "0.2",
251
- "border_width": 0,
252
- "radius": 6,
253
- "text_color": "#000000",
254
- },
255
- pressed={
256
- "back_color": "#F9F9F9",
257
- "back_opacity": "0.3",
258
- "border_color": "#000000",
259
- "border_color_opacity": "0.1",
260
- "border_color2": None,
261
- "border_color2_opacity": None,
262
- "border_width": 0,
263
- "radius": 6,
264
- "text_color": "#636363",
265
- },
266
- disabled={
267
- "back_color": "#ffffff",
268
- "back_opacity": "1.000000",
269
- "border_color": "#000000",
270
- "border_color_opacity": "0.058824",
271
- "border_color2": "#000000",
272
- "border_color2_opacity": "0.160784",
273
- "border_width": 0,
274
- "radius": 6,
275
- "text_color": "#a2a2a2",
276
- }
277
- )
240
+ self._theme("light", "menu")
278
241
 
279
242
  def _light_accent(self):
280
- self.dconfigure(
281
- rest={
282
- "back_color": "#005FB8",
283
- "back_opacity": "1",
284
- "border_color": "#FFFFFF",
285
- "border_color_opacity": "0.08",
286
- "border_color2": "#000000",
287
- "border_color2_opacity": "0.4",
288
- "border_width": 1,
289
- "radius": 6,
290
- "text_color": "#ffffff",
291
- },
292
- hover={
293
- "back_color": "#005FB8",
294
- "back_opacity": "0.9",
295
- "border_color": "#FFFFFF",
296
- "border_color_opacity": "0.08",
297
- "border_color2": "#000000",
298
- "border_color2_opacity": "0.4",
299
- "border_width": 1,
300
- "radius": 6,
301
- "text_color": "#ffffff",
302
- },
303
- pressed={
304
- "back_color": "#005FB8",
305
- "back_opacity": "0.8",
306
- "border_color": "#FFFFFF",
307
- "border_color_opacity": "0.08",
308
- "border_color2": "#FFFFFF",
309
- "border_color2_opacity": "0.08",
310
- "border_width": 1,
311
- "radius": 6,
312
- "text_color": "#c2d9ee",
313
- },
314
- disabled={
315
- "back_color": "#000000",
316
- "back_opacity": "0.22",
317
- "border_color": "#FFFFFF",
318
- "border_color_opacity": "1",
319
- "border_color2": "#FFFFFF",
320
- "border_color2_opacity": "1",
321
- "border_width": 0,
322
- "radius": 6,
323
- "text_color": "#f3f3f3",
324
- }
325
- )
243
+ self._theme("light", "accent")
326
244
 
327
245
  def _dark(self):
328
- self.dconfigure(
329
- rest={
330
- "back_color": "#FFFFFF",
331
- "back_opacity": "0.06",
332
- "border_color": "#FFFFFF",
333
- "border_color_opacity": "0.09",
334
- "border_color2": "#FFFFFF",
335
- "border_color2_opacity": "0.07",
336
- "border_width": 1,
337
- "radius": 6,
338
- "text_color": "#FFFFFF",
339
- },
340
- hover={
341
- "back_color": "#FFFFFF",
342
- "back_opacity": "0.08",
343
- "border_color": "#FFFFFF",
344
- "border_color_opacity": "0.09",
345
- "border_color2": "#FFFFFF",
346
- "border_color2_opacity": "0.07",
347
- "border_width": 1,
348
- "radius": 6,
349
- "text_color": "#FFFFFF",
350
- },
351
- pressed={
352
- "back_color": "#FFFFFF",
353
- "back_opacity": "0.03",
354
- "border_color": "#FFFFFF",
355
- "border_color_opacity": "0.07",
356
- "border_color2": None,
357
- "border_color2_opacity": None,
358
- "border_width": 1,
359
- "radius": 6,
360
- "text_color": "#7D7D7D",
361
- },
362
- disabled={
363
- "back_color": "#FFFFFF",
364
- "back_opacity": "0.04",
365
- "border_color": "#FFFFFF",
366
- "border_color_opacity": "0.07",
367
- "border_color2": None,
368
- "border_color2_opacity": None,
369
- "border_width": 1,
370
- "radius": 6,
371
- "text_color": "#a2a2a2",
372
- }
373
- )
246
+ self._theme("dark", "standard")
374
247
 
375
248
  def _dark_menu(self):
376
- self.dconfigure(
377
- rest={
378
- "back_color": "#FFFFFF",
379
- "back_opacity": "0",
380
- "border_color": "#FFFFFF",
381
- "border_color_opacity": "0",
382
- "border_color2": "#FFFFFF",
383
- "border_color2_opacity": "0",
384
- "border_width": 0,
385
- "radius": 6,
386
- "text_color": "#FFFFFF",
387
- },
388
- hover={
389
- "back_color": "#FFFFFF",
390
- "back_opacity": "0.04",
391
- "border_color": "#FFFFFF",
392
- "border_color_opacity": "0.045",
393
- "border_color2": "#FFFFFF",
394
- "border_color2_opacity": "0.07",
395
- "border_width": 0,
396
- "radius": 6,
397
- "text_color": "#FFFFFF",
398
- },
399
- pressed={
400
- "back_color": "#FFFFFF",
401
- "back_opacity": "0.015",
402
- "border_color": "#FFFFFF",
403
- "border_color_opacity": "0.035",
404
- "border_color2": None,
405
- "border_color2_opacity": None,
406
- "border_width": 0,
407
- "radius": 6,
408
- "text_color": "#7D7D7D",
409
- },
410
- disabled={
411
- "back_color": "#FFFFFF",
412
- "back_opacity": "0",
413
- "border_color": "#FFFFFF",
414
- "border_color_opacity": "0",
415
- "border_color2": None,
416
- "border_color2_opacity": None,
417
- "border_width": 0,
418
- "radius": 6,
419
- "text_color": "#a2a2a2",
420
- }
421
- )
249
+ self._theme("dark", "menu")
422
250
 
423
251
  def _dark_accent(self):
424
- self.dconfigure(
425
- rest={
426
- "back_color": "#60CDFF",
427
- "back_opacity": "1",
428
- "border_color": "#FFFFFF",
429
- "border_color_opacity": "0.08",
430
- "border_color2": "#000000",
431
- "border_color2_opacity": "0.14",
432
- "border_width": 1,
433
- "radius": 6,
434
- "text_color": "#000000",
435
- },
436
- hover={
437
- "back_color": "#60CDFF",
438
- "back_opacity": "0.9",
439
- "border_color": "#FFFFFF",
440
- "border_color_opacity": "0.08",
441
- "border_color2": "#000000",
442
- "border_color2_opacity": "0.14",
443
- "border_width": 1,
444
- "radius": 6,
445
- "text_color": "#000000",
446
- },
447
- pressed={
448
- "back_color": "#60CDFF",
449
- "back_opacity": "0.8",
450
- "border_color": "#FFFFFF",
451
- "border_color_opacity": "0.08",
452
- "border_color2": None,
453
- "border_color2_opacity": None,
454
- "border_width": 1,
455
- "radius": 6,
456
- "text_color": "#295569",
457
- },
458
- disabled={
459
- "back_color": "#FFFFFF",
460
- "back_opacity": "0.16",
461
- "border_color": "#FFFFFF",
462
- "border_color_opacity": "0.16",
463
- "border_color2": None,
464
- "border_color2_opacity": None,
465
- "border_width": 1,
466
- "radius": 6,
467
- "text_color": "#a7a7a7",
468
- }
469
- )
252
+ self._theme("dark", "accent")
470
253
 
471
254
  def invoke(self):
472
255
  self.attributes.command()