tkfluent 0.0.2__py3-none-any.whl → 0.0.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/button.py CHANGED
@@ -4,25 +4,34 @@ from tkdeft.windows.drawwidget import DDrawWidget
4
4
 
5
5
 
6
6
  class FluButtonDraw(DSvgDraw):
7
- def create_roundrect(self,
8
- x1, y1, x2, y2, radius, radiusy=None, temppath=None,
9
- fill="transparent", outline="black", outline2="black", width=1
10
- ):
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
+ ):
11
12
  if radiusy:
12
13
  _rx = radius
13
14
  _ry = radiusy
14
15
  else:
15
16
  _rx, _ry = radius, radius
16
17
  drawing = self.create_drawing(x2 - x1, y2 - y1, temppath=temppath)
17
- border = drawing[1].linearGradient(start=(x1, y1), end=(x1, y2), id="DButton.Border")
18
- border.add_stop_color("0%", outline)
19
- border.add_stop_color("100%", outline2)
20
- drawing[1].defs.add(border)
18
+ if outline2:
19
+ border = drawing[1].linearGradient(start=(x1, y1), end=(x1, y2), id="DButton.Border",
20
+ gradientUnits="userSpaceOnUse")
21
+ border.add_stop_color("0.9", outline, outline_opacity)
22
+ border.add_stop_color("1", outline2, outline2_opacity)
23
+ drawing[1].defs.add(border)
24
+ stroke = f"url(#{border.get_id()})"
25
+ stroke_opacity = 1
26
+ else:
27
+ stroke = outline
28
+ stroke_opacity = outline_opacity
21
29
  drawing[1].add(
22
30
  drawing[1].rect(
23
31
  (x1, y1), (x2 - x1, y2 - y1), _rx, _ry,
24
- fill=fill, stroke_width=width,
25
- stroke=f"url(#{border.get_id()})",
32
+ fill=fill, fill_opacity=fill_opacity,
33
+ stroke=stroke, stroke_width=width, stroke_opacity=stroke_opacity,
34
+ transform="translate(0.500000 0.500000)"
26
35
  )
27
36
  )
28
37
  drawing[1].save()
@@ -32,18 +41,22 @@ class FluButtonDraw(DSvgDraw):
32
41
  class FluButtonCanvas(DCanvas):
33
42
  draw = FluButtonDraw
34
43
 
35
- def create_round_rectangle(self,
36
- x1, y1, x2, y2, r1, r2=None, temppath=None,
37
- fill="transparent", outline="black", outline2="black", width=1
38
- ):
39
- self._img = self.svgdraw.create_roundrect(
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(
40
51
  x1, y1, x2, y2, r1, r2, temppath=temppath,
41
- fill=fill, outline=outline, outline2=outline2, width=width
52
+ fill=fill, fill_opacity=fill_opacity,
53
+ outline=outline, outline2=outline2, outline_opacity=outline_opacity, outline2_opacity=outline2_opacity,
54
+ width=width,
42
55
  )
43
56
  self._tkimg = self.svgdraw.create_tksvg_image(self._img)
44
57
  return self.create_image(x1, y1, anchor="nw", image=self._tkimg)
45
58
 
46
- create_roundrect = create_round_rectangle
59
+ create_roundrect = create_round_rectangle_with_text
47
60
 
48
61
 
49
62
  class FluButton(FluButtonCanvas, DDrawWidget):
@@ -55,6 +68,7 @@ class FluButton(FluButtonCanvas, DDrawWidget):
55
68
  font=None,
56
69
  mode="light",
57
70
  style="standard",
71
+ state="normal",
58
72
  **kwargs):
59
73
  self._init(mode, style)
60
74
 
@@ -67,7 +81,8 @@ class FluButton(FluButtonCanvas, DDrawWidget):
67
81
 
68
82
  self.dconfigure(
69
83
  text=text,
70
- command=command
84
+ command=command,
85
+ state=state,
71
86
  )
72
87
 
73
88
  self.bind("<<Clicked>>", lambda event=None: self.focus_set(), add="+")
@@ -88,31 +103,12 @@ class FluButton(FluButtonCanvas, DDrawWidget):
88
103
  "text": "",
89
104
  "command": None,
90
105
  "font": None,
106
+ "state": "normal",
91
107
 
92
- "rest": {
93
- "back_color": "#ffffff",
94
- "border_color": "#f0f0f0",
95
- "border_color2": "#d6d6d6",
96
- "border_width": 1,
97
- "radius": 6,
98
- "text_color": "#1b1b1b",
99
- },
100
- "hover": {
101
- "back_color": "#fcfcfc",
102
- "border_color": "#f0f0f0",
103
- "border_color2": "#d6d6d6",
104
- "border_width": 1,
105
- "radius": 6,
106
- "text_color": "#1b1b1b",
107
- },
108
- "pressed": {
109
- "back_color": "#fdfdfd",
110
- "border_color": "#f0f0f0",
111
- "border_color2": "#f0f0f0",
112
- "border_width": 1,
113
- "radius": 6,
114
- "text_color": "#636363",
115
- }
108
+ "rest": {},
109
+ "hover": {},
110
+ "pressed": {},
111
+ "disabled": {}
116
112
  }
117
113
  )
118
114
 
@@ -121,52 +117,66 @@ class FluButton(FluButtonCanvas, DDrawWidget):
121
117
  def _draw(self, event=None):
122
118
  super()._draw(event)
123
119
 
120
+ width = self.winfo_width()
121
+ height = self.winfo_height()
122
+
124
123
  self.delete("all")
125
124
 
126
- if self.enter:
127
- if self.button1:
128
- _back_color = self.attributes.pressed.back_color
129
- _border_color = self.attributes.pressed.border_color
130
- _border_color2 = self.attributes.pressed.border_color2
131
- _border_width = self.attributes.pressed.border_width
132
- _radius = self.attributes.pressed.radius
133
- _text_color = self.attributes.pressed.text_color
125
+ state = self.dcget("state")
126
+
127
+ _dict = None
128
+
129
+ if state == "normal":
130
+ if self.enter:
131
+ if self.button1:
132
+ _dict = self.attributes.pressed
133
+ else:
134
+ _dict = self.attributes.hover
134
135
  else:
135
- _back_color = self.attributes.hover.back_color
136
- _border_color = self.attributes.hover.border_color
137
- _border_color2 = self.attributes.hover.border_color2
138
- _border_width = self.attributes.hover.border_width
139
- _radius = self.attributes.hover.radius
140
- _text_color = self.attributes.hover.text_color
136
+ _dict = self.attributes.rest
141
137
  else:
142
- _back_color = self.attributes.rest.back_color
143
- _border_color = self.attributes.rest.border_color
144
- _border_color2 = self.attributes.rest.border_color2
145
- _border_width = self.attributes.rest.border_width
146
- _radius = self.attributes.rest.radius
147
- _text_color = self.attributes.rest.text_color
148
-
149
- self.element_border = self.create_round_rectangle(
150
- 0, 0, self.winfo_width(), self.winfo_height(), _radius, temppath=self.temppath,
151
- fill=_back_color, outline=_border_color, outline2=_border_color2, width=_border_width
138
+ _dict = self.attributes.disabled
139
+
140
+ _back_color = _dict.back_color
141
+ _back_opacity = _dict.back_opacity
142
+ _border_color = _dict.border_color
143
+ _border_color_opacity = _dict.border_color_opacity
144
+ _border_color2 = _dict.border_color2
145
+ _border_color2_opacity = _dict.border_color2_opacity
146
+ _border_width = _dict.border_width
147
+ _radius = _dict.radius
148
+ _text_color = _dict.text_color
149
+
150
+ self.element_border = self.create_round_rectangle_with_text(
151
+ 0, 0, width, height, _radius, temppath=self.temppath,
152
+ fill=_back_color, fill_opacity=_back_opacity,
153
+ outline=_border_color, outline_opacity=_border_color_opacity, outline2=_border_color2,
154
+ outline2_opacity=_border_color2_opacity,
155
+ width=_border_width,
152
156
  )
157
+
153
158
  self.element_text = self.create_text(
154
159
  self.winfo_width() / 2, self.winfo_height() / 2, anchor="center",
155
160
  fill=_text_color, text=self.attributes.text, font=self.attributes.font
156
161
  )
157
162
 
158
- def theme(self, mode, style=None):
159
- self.mode = mode
163
+ def theme(self, mode=None, style=None):
164
+ if mode:
165
+ self.mode = mode
160
166
  if style:
161
167
  self.style = style
162
- if mode.lower() == "dark":
168
+ if self.mode.lower() == "dark":
163
169
  if self.style.lower() == "accent":
164
170
  self._dark_accent()
171
+ elif self.style.lower() == "menu":
172
+ self._dark_menu()
165
173
  else:
166
174
  self._dark()
167
175
  else:
168
176
  if self.style.lower() == "accent":
169
177
  self._light_accent()
178
+ elif self.style.lower() == "menu":
179
+ self._light_menu()
170
180
  else:
171
181
  self._light()
172
182
 
@@ -174,113 +184,299 @@ class FluButton(FluButtonCanvas, DDrawWidget):
174
184
  self.dconfigure(
175
185
  rest={
176
186
  "back_color": "#ffffff",
177
- "border_color": "#f0f0f0",
178
- "border_color2": "#d6d6d6",
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",
179
192
  "border_width": 1,
180
193
  "radius": 6,
181
- "text_color": "#1b1b1b",
194
+ "text_color": "#000000",
182
195
  },
183
196
  hover={
184
- "back_color": "#fcfcfc",
185
- "border_color": "#f0f0f0",
186
- "border_color2": "#d6d6d6",
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",
187
203
  "border_width": 1,
188
204
  "radius": 6,
189
- "text_color": "#1b1b1b",
205
+ "text_color": "#000000",
190
206
  },
191
207
  pressed={
192
- "back_color": "#fdfdfd",
193
- "border_color": "#f0f0f0",
194
- "border_color2": "#f0f0f0",
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,
195
214
  "border_width": 1,
196
215
  "radius": 6,
197
216
  "text_color": "#636363",
217
+ },
218
+ 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",
228
+ }
229
+ )
230
+
231
+ 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",
198
276
  }
199
277
  )
200
278
 
201
279
  def _light_accent(self):
202
280
  self.dconfigure(
203
281
  rest={
204
- "back_color": "#005fb8",
205
- "border_color": "#146cbe",
206
- "border_color2": "#00396e",
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",
207
288
  "border_width": 1,
208
289
  "radius": 6,
209
290
  "text_color": "#ffffff",
210
291
  },
211
292
  hover={
212
- "back_color": "#0359a9",
213
- "border_color": "#1766b0",
214
- "border_color2": "#0f4373",
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",
215
299
  "border_width": 1,
216
300
  "radius": 6,
217
301
  "text_color": "#ffffff",
218
302
  },
219
303
  pressed={
220
- "back_color": "#005fb8",
221
- "border_color": "#4389ca",
222
- "border_color2": "#4389ca",
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",
223
310
  "border_width": 1,
224
311
  "radius": 6,
225
- "text_color": "#b4cbe0",
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",
226
324
  }
227
325
  )
228
326
 
229
327
  def _dark(self):
230
328
  self.dconfigure(
231
329
  rest={
232
- "back_color": "#272727",
233
- "border_color": "#303030",
234
- "border_color2": "#262626",
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",
235
336
  "border_width": 1,
236
337
  "radius": 6,
237
- "text_color": "#ffffff",
338
+ "text_color": "#FFFFFF",
238
339
  },
239
340
  hover={
240
- "back_color": "#2d2d2d",
241
- "border_color": "#303030",
242
- "border_color2": "#262626",
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",
243
347
  "border_width": 1,
244
348
  "radius": 6,
245
- "text_color": "#ffffff",
349
+ "text_color": "#FFFFFF",
246
350
  },
247
351
  pressed={
248
- "back_color": "#212121",
249
- "border_color": "#2a2a2a",
250
- "border_color2": "#262626",
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,
251
358
  "border_width": 1,
252
359
  "radius": 6,
253
- "text_color": "#cfcfcf",
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
+ )
374
+
375
+ 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",
254
420
  }
255
421
  )
256
422
 
257
423
  def _dark_accent(self):
258
424
  self.dconfigure(
259
425
  rest={
260
- "back_color": "#60cdff",
261
- "border_color": "#6cd1ff",
262
- "border_color2": "#56b4df",
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",
263
432
  "border_width": 1,
264
433
  "radius": 6,
265
434
  "text_color": "#000000",
266
435
  },
267
436
  hover={
268
- "back_color": "#5abce9",
269
- "border_color": "#67c1eb",
270
- "border_color2": "#50a5cc",
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",
271
443
  "border_width": 1,
272
444
  "radius": 6,
273
445
  "text_color": "#000000",
274
446
  },
275
447
  pressed={
276
- "back_color": "#52a9d1",
277
- "border_color": "#60b0d5",
278
- "border_color2": "#60b0d5",
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,
279
454
  "border_width": 1,
280
455
  "radius": 6,
281
- "text_color": "#295468",
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",
282
468
  }
283
469
  )
284
470
 
285
471
  def invoke(self):
286
472
  self.attributes.command()
473
+
474
+ def _event_off_button1(self, event=None):
475
+ self.button1 = False
476
+
477
+ self._draw(event)
478
+
479
+ if self.enter:
480
+ # self.focus_set()
481
+ if self.dcget("state") == "normal":
482
+ self.event_generate("<<Clicked>>")