tkfluent 0.0.3__tar.gz → 0.0.4__tar.gz

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.
Files changed (32) hide show
  1. {tkfluent-0.0.3 → tkfluent-0.0.4}/PKG-INFO +1 -1
  2. {tkfluent-0.0.3 → tkfluent-0.0.4}/pyproject.toml +1 -1
  3. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/__init__.py +4 -1
  4. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/__main__.py +11 -3
  5. tkfluent-0.0.4/tkflu/button.py +482 -0
  6. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/bwm.py +7 -4
  7. tkfluent-0.0.4/tkflu/constants.py +15 -0
  8. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/entry.py +63 -18
  9. tkfluent-0.0.4/tkflu/icons.py +47 -0
  10. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/menu.py +41 -3
  11. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/popupmenu.py +4 -29
  12. tkfluent-0.0.4/tkflu/popupwindow.py +31 -0
  13. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/text.py +56 -18
  14. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/togglebutton.py +6 -48
  15. tkfluent-0.0.4/tkflu/tooltip.py +8 -0
  16. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/toplevel.py +3 -4
  17. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/window.py +6 -3
  18. tkfluent-0.0.3/tkflu/button.py +0 -347
  19. {tkfluent-0.0.3 → tkfluent-0.0.4}/README.md +0 -0
  20. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/badge.py +0 -0
  21. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/checkbox.py +0 -0
  22. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/customwindow.py +0 -0
  23. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/customwindow2.py +0 -0
  24. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/frame.py +0 -0
  25. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/image.py +0 -0
  26. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/label.py +0 -0
  27. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/listbox.py +0 -0
  28. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/litenav.py +0 -0
  29. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/menubar.py +0 -0
  30. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/scrollbar.py +0 -0
  31. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/thememanager.py +0 -0
  32. {tkfluent-0.0.3 → tkfluent-0.0.4}/tkflu/winico.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tkfluent
3
- Version: 0.0.3
3
+ Version: 0.0.4
4
4
  Summary: Fluent Design for Tkinter
5
5
  Author: XiangQinxi
6
6
  Author-email: xiangqinxi@outlook.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "tkfluent"
3
- version = "0.0.3"
3
+ version = "0.0.4"
4
4
  description = "Fluent Design for Tkinter"
5
5
  authors = ["XiangQinxi <xiangqinxi@outlook.com>"]
6
6
  readme = "README.md"
@@ -9,15 +9,18 @@ Fluent设计的tkinter组件库(模板)
9
9
 
10
10
  from .badge import FluBadge
11
11
  from .button import FluButton
12
+ from .constants import *
12
13
  from .entry import FluEntry
13
14
  from .frame import FluFrame
14
15
  from .label import FluLabel
15
16
  from .menu import FluMenu
16
17
  from .menubar import FluMenuBar
17
- from .popupmenu import FluPopupMenu
18
+ from .popupmenu import FluPopupMenu, FluPopupMenuWindow
19
+ from .popupwindow import FluPopupWindow
18
20
  from .text import FluText
19
21
  from .thememanager import FluThemeManager
20
22
  from .togglebutton import FluToggleButton
23
+ from .tooltip import FluToolTip
21
24
  from .toplevel import FluToplevel
22
25
  from .window import FluWindow
23
26
  #from .winico import FluWinico
@@ -27,14 +27,20 @@ menu2 = FluMenu(height=93)
27
27
  menu2.add_command(
28
28
  label="FluMenu3-1", width=80, command=lambda: print("FluMenu3-1 -> Clicked")
29
29
  )
30
- menu2.add_command(
31
- label="FluMenu3-2", width=80, command=lambda: print("FluMenu3-2 -> Clicked")
30
+
31
+ menu3 = FluMenu(height=46, width=10)
32
+ menu3.add_command(
33
+ label="FluMenu3-2-1", width=80, command=lambda: print("FluMenu3-2-1 -> Clicked")
34
+ )
35
+
36
+ menu2.add_cascade(
37
+ label="FluMenu3-2", width=80, menu=menu3
32
38
  )
33
39
  menubar.add_cascade(
34
40
  label="FluMenu3", width=80, menu=menu2
35
41
  )
36
42
 
37
- menubar.pack(fill="x",)
43
+ menubar.pack(fill="x", )
38
44
 
39
45
  frame = FluFrame(root)
40
46
 
@@ -54,6 +60,7 @@ button2 = FluButton(
54
60
  )
55
61
  button2.pack(fill="x", padx=5, pady=5)
56
62
 
63
+
57
64
  def toggle1():
58
65
  print(f"FluToggleButton -> Toggled -> Checked: {togglebutton1.dcget('checked')}")
59
66
  if togglebutton1.dcget('checked'):
@@ -61,6 +68,7 @@ def toggle1():
61
68
  else:
62
69
  thememanager.mode("light")
63
70
 
71
+
64
72
  togglebutton1 = FluToggleButton(
65
73
  frame, text="FluToggleButton", command=toggle1
66
74
  )
@@ -0,0 +1,482 @@
1
+ from tkdeft.windows.draw import DSvgDraw
2
+ from tkdeft.windows.canvas import DCanvas
3
+ from tkdeft.windows.drawwidget import DDrawWidget
4
+
5
+
6
+ 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
+ ):
12
+ if radiusy:
13
+ _rx = radius
14
+ _ry = radiusy
15
+ else:
16
+ _rx, _ry = radius, radius
17
+ drawing = self.create_drawing(x2 - x1, y2 - y1, temppath=temppath)
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
29
+ drawing[1].add(
30
+ drawing[1].rect(
31
+ (x1, y1), (x2 - x1, y2 - y1), _rx, _ry,
32
+ fill=fill, fill_opacity=fill_opacity,
33
+ stroke=stroke, stroke_width=width, stroke_opacity=stroke_opacity,
34
+ transform="translate(0.500000 0.500000)"
35
+ )
36
+ )
37
+ drawing[1].save()
38
+ return drawing[0]
39
+
40
+
41
+ class FluButtonCanvas(DCanvas):
42
+ draw = FluButtonDraw
43
+
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(
51
+ x1, y1, x2, y2, r1, r2, temppath=temppath,
52
+ fill=fill, fill_opacity=fill_opacity,
53
+ outline=outline, outline2=outline2, outline_opacity=outline_opacity, outline2_opacity=outline2_opacity,
54
+ width=width,
55
+ )
56
+ self._tkimg = self.svgdraw.create_tksvg_image(self._img)
57
+ return self.create_image(x1, y1, anchor="nw", image=self._tkimg)
58
+
59
+ create_roundrect = create_round_rectangle_with_text
60
+
61
+
62
+ class FluButton(FluButtonCanvas, DDrawWidget):
63
+ def __init__(self, *args,
64
+ text="",
65
+ width=120,
66
+ height=32,
67
+ command=None,
68
+ font=None,
69
+ mode="light",
70
+ style="standard",
71
+ state="normal",
72
+ **kwargs):
73
+ self._init(mode, style)
74
+
75
+ super().__init__(*args, width=width, height=height, **kwargs)
76
+
77
+ if command is None:
78
+ def empty(): pass
79
+
80
+ command = empty
81
+
82
+ self.dconfigure(
83
+ text=text,
84
+ command=command,
85
+ state=state,
86
+ )
87
+
88
+ self.bind("<<Clicked>>", lambda event=None: self.focus_set(), add="+")
89
+ self.bind("<<Clicked>>", lambda event=None: self.attributes.command(), add="+")
90
+
91
+ self.bind("<Return>", lambda event=None: self.attributes.command(), add="+") # 可以使用回车键模拟点击
92
+
93
+ if font is None:
94
+ from tkdeft.utility.fonts import SegoeFont
95
+ self.attributes.font = SegoeFont()
96
+
97
+ def _init(self, mode, style):
98
+
99
+ from easydict import EasyDict
100
+
101
+ self.attributes = EasyDict(
102
+ {
103
+ "text": "",
104
+ "command": None,
105
+ "font": None,
106
+ "state": "normal",
107
+
108
+ "rest": {},
109
+ "hover": {},
110
+ "pressed": {},
111
+ "disabled": {}
112
+ }
113
+ )
114
+
115
+ self.theme(mode=mode, style=style)
116
+
117
+ def _draw(self, event=None):
118
+ super()._draw(event)
119
+
120
+ width = self.winfo_width()
121
+ height = self.winfo_height()
122
+
123
+ self.delete("all")
124
+
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
135
+ else:
136
+ _dict = self.attributes.rest
137
+ else:
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,
156
+ )
157
+
158
+ self.element_text = self.create_text(
159
+ self.winfo_width() / 2, self.winfo_height() / 2, anchor="center",
160
+ fill=_text_color, text=self.attributes.text, font=self.attributes.font
161
+ )
162
+
163
+ def theme(self, mode=None, style=None):
164
+ if mode:
165
+ self.mode = mode
166
+ if style:
167
+ self.style = style
168
+ if self.mode.lower() == "dark":
169
+ if self.style.lower() == "accent":
170
+ self._dark_accent()
171
+ elif self.style.lower() == "menu":
172
+ self._dark_menu()
173
+ else:
174
+ self._dark()
175
+ else:
176
+ if self.style.lower() == "accent":
177
+ self._light_accent()
178
+ elif self.style.lower() == "menu":
179
+ self._light_menu()
180
+ else:
181
+ self._light()
182
+
183
+ def _light(self):
184
+ self.dconfigure(
185
+ 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",
195
+ },
196
+ 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",
206
+ },
207
+ 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",
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",
276
+ }
277
+ )
278
+
279
+ 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
+ )
326
+
327
+ 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
+ )
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",
420
+ }
421
+ )
422
+
423
+ 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
+ )
470
+
471
+ def invoke(self):
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>>")
@@ -44,6 +44,12 @@ class BWm(object):
44
44
  )
45
45
  self.closebutton._draw()
46
46
 
47
+ def _event_key_esc(self, event=None):
48
+ self._event_delete_window()
49
+
50
+ def _event_delete_window(self):
51
+ self.destroy()
52
+
47
53
  def _event_configure(self, event=None):
48
54
 
49
55
  """
@@ -71,9 +77,6 @@ class BWm(object):
71
77
 
72
78
  self.theme(mode)
73
79
 
74
- def _exit(self):
75
- self.quit()
76
-
77
80
  def theme(self, mode: str):
78
81
 
79
82
  """
@@ -139,7 +142,7 @@ class BWm(object):
139
142
  self.titlebar = Frame(self, width=180, height=35, background=self.attributes.back_color)
140
143
  self.titlelabel = FluLabel(self.titlebar, text=self.title(), width=50)
141
144
  self.titlelabel.pack(fill="y", side="left")
142
- self.closebutton = FluButton(self.titlebar, text="", width=32, height=32, command=lambda: self._exit())
145
+ self.closebutton = FluButton(self.titlebar, text="", width=32, height=32, command=lambda: self._event_delete_window())
143
146
  self.closebutton.pack(fill="y", side="right")
144
147
  self.titlebar.pack(fill="x", side="top")
145
148
 
@@ -0,0 +1,15 @@
1
+ NO = FALSE = OFF = 0
2
+ YES = TRUE = ON = 1
3
+
4
+ # Modes
5
+ LIGHT = 'light'
6
+ DARK = 'dark'
7
+
8
+ # States
9
+ NORMAL = 'normal'
10
+ DISABLED = 'disabled'
11
+
12
+ # FluButton Styles
13
+ STANDARD = 'standard'
14
+ ACCENT = 'accent'
15
+ MENU = 'menu'