gui-utilities 1.3.27__py3-none-any.whl → 1.3.49__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.
- gui_utilities/gui_utilities.py +238 -83
- {gui_utilities-1.3.27.dist-info → gui_utilities-1.3.49.dist-info}/METADATA +1 -1
- {gui_utilities-1.3.27.dist-info → gui_utilities-1.3.49.dist-info}/RECORD +6 -6
- {gui_utilities-1.3.27.dist-info → gui_utilities-1.3.49.dist-info}/WHEEL +0 -0
- {gui_utilities-1.3.27.dist-info → gui_utilities-1.3.49.dist-info}/licenses/LICENSE +0 -0
- {gui_utilities-1.3.27.dist-info → gui_utilities-1.3.49.dist-info}/top_level.txt +0 -0
gui_utilities/gui_utilities.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from PyQt6.QtCore import Qt, QObject, QEvent, QSize
|
|
2
|
-
from PyQt6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QLineEdit, QComboBox, QDialog, QToolButton, QWidgetAction, QCheckBox, QTableWidget, QHeaderView
|
|
3
|
-
from PyQt6.QtGui import QIcon
|
|
2
|
+
from PyQt6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QLineEdit, QComboBox, QDialog, QToolButton, QWidgetAction, QCheckBox, QTableWidget, QHeaderView, QApplication, QStyle, QStyledItemDelegate
|
|
3
|
+
from PyQt6.QtGui import QIcon, QTextDocument
|
|
4
4
|
import re
|
|
5
5
|
import requests
|
|
6
6
|
import importlib.resources
|
|
@@ -9,8 +9,18 @@ main_dir = importlib.resources.files("gui_utilities")
|
|
|
9
9
|
icons_dir = main_dir / "icons"
|
|
10
10
|
tlds_path = main_dir / "tlds"
|
|
11
11
|
|
|
12
|
-
def
|
|
13
|
-
|
|
12
|
+
def latex_to_html(expression):
|
|
13
|
+
html_expression = expression
|
|
14
|
+
html_expression = re.sub(r"\\frac\{(.*?)\}\{(.*?)\}", r"<span style='font-size:90%;'>\1⁄\2</span>", html_expression)
|
|
15
|
+
html_expression = re.sub(r"_\{([^}]+)\}", r"<sub>\1</sub>", html_expression)
|
|
16
|
+
html_expression = re.sub(r"\^\{([^}]+)\}", r"<sup>\1</sup>", html_expression)
|
|
17
|
+
html_expression = re.sub(r"_([a-zA-Z0-9]+)", r"<sub>\1</sub>", html_expression)
|
|
18
|
+
html_expression = re.sub(r"\^([a-zA-Z0-9]+)", r"<sup>\1</sup>", html_expression)
|
|
19
|
+
html_expression = html_expression.replace(" ", " ")
|
|
20
|
+
return html_expression
|
|
21
|
+
|
|
22
|
+
def create_window(title, background_color = "#1e1e1e", parent = None):
|
|
23
|
+
window = QWidget(parent)
|
|
14
24
|
window.setObjectName("window")
|
|
15
25
|
window.setWindowTitle(title)
|
|
16
26
|
window.setStyleSheet(f"#window {{background-color: {background_color};}}")
|
|
@@ -33,7 +43,9 @@ def create_menu(
|
|
|
33
43
|
title_padding_bottom = None,
|
|
34
44
|
title_border_width = 0,
|
|
35
45
|
title_border_color = "#ffffff",
|
|
36
|
-
title_border_radius = 0
|
|
46
|
+
title_border_radius = 0,
|
|
47
|
+
math_expression = False,
|
|
48
|
+
title_alignment = Qt.AlignmentFlag.AlignCenter
|
|
37
49
|
):
|
|
38
50
|
main_layout = QVBoxLayout()
|
|
39
51
|
main_layout.setContentsMargins(25, 25, 25, 25)
|
|
@@ -50,7 +62,9 @@ def create_menu(
|
|
|
50
62
|
padding_bottom = title_padding_bottom,
|
|
51
63
|
border_width = title_border_width,
|
|
52
64
|
border_color = title_border_color,
|
|
53
|
-
border_radius = title_border_radius
|
|
65
|
+
border_radius = title_border_radius,
|
|
66
|
+
math_expression = math_expression,
|
|
67
|
+
alignment = title_alignment
|
|
54
68
|
))
|
|
55
69
|
body_layout = QHBoxLayout()
|
|
56
70
|
main_layout.addLayout(body_layout)
|
|
@@ -102,7 +116,9 @@ def create_header(
|
|
|
102
116
|
title_padding_bottom = None,
|
|
103
117
|
title_border_width = 0,
|
|
104
118
|
title_border_color = "#ffffff",
|
|
105
|
-
title_border_radius = 0
|
|
119
|
+
title_border_radius = 0,
|
|
120
|
+
math_expression = False,
|
|
121
|
+
title_alignment = Qt.AlignmentFlag.AlignCenter
|
|
106
122
|
):
|
|
107
123
|
main_layout = QVBoxLayout()
|
|
108
124
|
main_layout.setContentsMargins(margin_left, margin_top, margin_right, margin_bottom)
|
|
@@ -119,7 +135,9 @@ def create_header(
|
|
|
119
135
|
padding_bottom = title_padding_bottom,
|
|
120
136
|
border_width = title_border_width,
|
|
121
137
|
border_color = title_border_color,
|
|
122
|
-
border_radius = title_border_radius
|
|
138
|
+
border_radius = title_border_radius,
|
|
139
|
+
math_expression = math_expression,
|
|
140
|
+
alignment = title_alignment
|
|
123
141
|
)
|
|
124
142
|
main_layout.addLayout(title_layout)
|
|
125
143
|
main_layout.addStretch()
|
|
@@ -138,11 +156,12 @@ def create_title(
|
|
|
138
156
|
padding_bottom = None,
|
|
139
157
|
border_width = 0,
|
|
140
158
|
border_color = "#ffffff",
|
|
141
|
-
border_radius = 0
|
|
159
|
+
border_radius = 0,
|
|
160
|
+
math_expression = False,
|
|
161
|
+
alignment = Qt.AlignmentFlag.AlignCenter
|
|
142
162
|
):
|
|
143
163
|
title_layout = QHBoxLayout()
|
|
144
164
|
title_layout.setContentsMargins(0, 0, 0, 25)
|
|
145
|
-
title_layout.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
146
165
|
title_label = create_label(
|
|
147
166
|
text = text,
|
|
148
167
|
font_family = font_family,
|
|
@@ -157,7 +176,9 @@ def create_title(
|
|
|
157
176
|
padding_bottom = padding_bottom,
|
|
158
177
|
border_width = border_width,
|
|
159
178
|
border_color = border_color,
|
|
160
|
-
border_radius = border_radius
|
|
179
|
+
border_radius = border_radius,
|
|
180
|
+
math_expression = math_expression,
|
|
181
|
+
alignment = alignment
|
|
161
182
|
)
|
|
162
183
|
title_layout.addWidget(title_label)
|
|
163
184
|
return title_layout
|
|
@@ -183,9 +204,20 @@ def create_label(
|
|
|
183
204
|
disabled_font_color = "#888888",
|
|
184
205
|
disabled_background_color = "transparent",
|
|
185
206
|
disabled_border_width = 0,
|
|
186
|
-
disabled_border_color = "#4a4a4a"
|
|
207
|
+
disabled_border_color = "#4a4a4a",
|
|
208
|
+
math_expression = False,
|
|
209
|
+
transparent_for_mouse = False,
|
|
210
|
+
alignment = None,
|
|
211
|
+
word_wrap = False,
|
|
212
|
+
parent = None
|
|
187
213
|
):
|
|
188
|
-
|
|
214
|
+
if math_expression:
|
|
215
|
+
label = QLabel(latex_to_html(text), parent)
|
|
216
|
+
label.setTextFormat(Qt.TextFormat.RichText)
|
|
217
|
+
else: label = QLabel(text, parent)
|
|
218
|
+
if transparent_for_mouse: label.setAttribute(Qt.WidgetAttribute.WA_TransparentForMouseEvents, True)
|
|
219
|
+
if alignment: label.setAlignment(alignment)
|
|
220
|
+
if word_wrap: label.setWordWrap(True)
|
|
189
221
|
padding_left_value = padding_left if padding_left is not None else padding
|
|
190
222
|
padding_top_value = padding_top if padding_top is not None else padding
|
|
191
223
|
padding_right_value = padding_right if padding_right is not None else padding
|
|
@@ -242,10 +274,12 @@ def create_button(
|
|
|
242
274
|
disabled_background_color = "#2d2d2d",
|
|
243
275
|
disabled_border_width = 2,
|
|
244
276
|
disabled_border_color = "#4a4a4a",
|
|
245
|
-
maximum_width = 360
|
|
277
|
+
maximum_width = 360,
|
|
278
|
+
math_expression = False,
|
|
279
|
+
parent = None
|
|
246
280
|
):
|
|
247
|
-
button = QPushButton()
|
|
248
|
-
button.setMaximumWidth(maximum_width)
|
|
281
|
+
button = QPushButton(parent)
|
|
282
|
+
if maximum_width is not None: button.setMaximumWidth(maximum_width)
|
|
249
283
|
main_layout = QVBoxLayout()
|
|
250
284
|
button.setLayout(main_layout)
|
|
251
285
|
main_layout.setContentsMargins(0, 0, 0, 0)
|
|
@@ -259,9 +293,11 @@ def create_button(
|
|
|
259
293
|
padding_top = padding_top,
|
|
260
294
|
padding_right = padding_right,
|
|
261
295
|
padding_bottom = padding_bottom,
|
|
262
|
-
disabled_border_width = disabled_border_width
|
|
296
|
+
disabled_border_width = disabled_border_width,
|
|
297
|
+
transparent_for_mouse = True,
|
|
298
|
+
alignment = Qt.AlignmentFlag.AlignCenter,
|
|
299
|
+
math_expression = math_expression
|
|
263
300
|
)
|
|
264
|
-
label.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
265
301
|
label.setWordWrap(True)
|
|
266
302
|
main_layout.addWidget(label)
|
|
267
303
|
button.setFixedHeight(main_layout.sizeHint().height() + 2 * border_width)
|
|
@@ -315,6 +351,7 @@ def create_text_box(
|
|
|
315
351
|
border_width = 2,
|
|
316
352
|
border_color = "#5c5c5c",
|
|
317
353
|
border_radius = 0,
|
|
354
|
+
placeholder_font_color = "#888888",
|
|
318
355
|
hover_background_color = "#333333",
|
|
319
356
|
hover_border_width = 3,
|
|
320
357
|
hover_border_color = "#777777",
|
|
@@ -330,9 +367,10 @@ def create_text_box(
|
|
|
330
367
|
focused_show_text_icon_url = str(icons_dir / "focused_show_text_icon.png"),
|
|
331
368
|
focused_hide_text_icon_url = str(icons_dir / "focused_hide_text_icon.png"),
|
|
332
369
|
hide_text = False,
|
|
333
|
-
math_expression = False
|
|
370
|
+
math_expression = False,
|
|
371
|
+
parent = None
|
|
334
372
|
):
|
|
335
|
-
text_box = QLineEdit()
|
|
373
|
+
text_box = QLineEdit(parent)
|
|
336
374
|
padding_left_value = padding_left if padding_left is not None else padding
|
|
337
375
|
padding_top_value = padding_top if padding_top is not None else padding
|
|
338
376
|
padding_right_value = padding_right if padding_right is not None else padding
|
|
@@ -366,30 +404,6 @@ def create_text_box(
|
|
|
366
404
|
}}
|
|
367
405
|
"""
|
|
368
406
|
text_box.setStyleSheet(style_sheet)
|
|
369
|
-
|
|
370
|
-
def latex_to_html(expression):
|
|
371
|
-
html_expression = expression
|
|
372
|
-
html_expression = re.sub(r"\\frac\{(.*?)\}\{(.*?)\}", r"<span style='font-size:90%;'>\1⁄\2</span>", html_expression)
|
|
373
|
-
html_expression = re.sub(r"([a-zA-Z])_(\d+)", r"\1<sub>\2</sub>", html_expression)
|
|
374
|
-
html_expression = re.sub(r"([a-zA-Z0-9])\^(\d+)", r"\1<sup>\2</sup>", html_expression)
|
|
375
|
-
html_expression = html_expression.replace(" ", " ")
|
|
376
|
-
return html_expression
|
|
377
|
-
|
|
378
|
-
if not math_expression: text_box.setPlaceholderText(placeholder_text)
|
|
379
|
-
else:
|
|
380
|
-
html_placeholder = latex_to_html(placeholder_text)
|
|
381
|
-
placeholder_label = QLabel(text_box)
|
|
382
|
-
placeholder_label.setTextFormat(Qt.TextFormat.RichText)
|
|
383
|
-
placeholder_label.setText(f"<span style = \"color: {font_color}; font-family: {font_family}; font-size: {font_size}px;\">{html_placeholder}</span>")
|
|
384
|
-
placeholder_label.setAttribute(Qt.WidgetAttribute.WA_TransparentForMouseEvents)
|
|
385
|
-
placeholder_label.move(padding_left_value + 2, padding_top_value + 2)
|
|
386
|
-
placeholder_label.show()
|
|
387
|
-
|
|
388
|
-
def update_placeholder_visibility():
|
|
389
|
-
placeholder_label.setVisible(text_box.text() == "")
|
|
390
|
-
|
|
391
|
-
text_box.textChanged.connect(update_placeholder_visibility)
|
|
392
|
-
update_placeholder_visibility()
|
|
393
407
|
if hide_text:
|
|
394
408
|
show_text_icon = QIcon(show_text_icon_url)
|
|
395
409
|
hide_text_icon = QIcon(hide_text_icon_url)
|
|
@@ -403,38 +417,83 @@ def create_text_box(
|
|
|
403
417
|
toggle_text_visibility_button.setIconSize(QSize(25, 25))
|
|
404
418
|
toggle_text_visibility_action = QWidgetAction(text_box)
|
|
405
419
|
toggle_text_visibility_action.setDefaultWidget(toggle_text_visibility_button)
|
|
406
|
-
|
|
407
|
-
|
|
420
|
+
text_box.addAction(toggle_text_visibility_action, QLineEdit.ActionPosition.TrailingPosition)
|
|
421
|
+
toggle_text_visibility_button.setStyleSheet("""
|
|
422
|
+
QToolButton {
|
|
408
423
|
background-color: transparent;
|
|
409
424
|
border: none;
|
|
410
425
|
margin-right: 10px;
|
|
411
|
-
}
|
|
412
|
-
"""
|
|
413
|
-
|
|
414
|
-
text_box.addAction(toggle_text_visibility_action, QLineEdit.ActionPosition.TrailingPosition)
|
|
415
|
-
|
|
426
|
+
}
|
|
427
|
+
""")
|
|
428
|
+
|
|
416
429
|
def update_icon():
|
|
417
430
|
is_password = text_box.echoMode() == QLineEdit.EchoMode.Password
|
|
418
431
|
if text_box.hasFocus(): icon = focused_hide_text_icon if is_password else focused_show_text_icon
|
|
419
432
|
else: icon = hide_text_icon if is_password else show_text_icon
|
|
420
433
|
toggle_text_visibility_button.setIcon(icon)
|
|
421
|
-
|
|
434
|
+
|
|
422
435
|
def toggle_visibility():
|
|
423
436
|
if text_box.echoMode() == QLineEdit.EchoMode.Password: text_box.setEchoMode(QLineEdit.EchoMode.Normal)
|
|
424
437
|
else: text_box.setEchoMode(QLineEdit.EchoMode.Password)
|
|
425
438
|
update_icon()
|
|
426
|
-
|
|
439
|
+
|
|
427
440
|
toggle_text_visibility_button.clicked.connect(toggle_visibility)
|
|
428
441
|
|
|
429
|
-
class
|
|
442
|
+
class _IconFocusWatcher(QObject):
|
|
443
|
+
|
|
444
|
+
def __init__(self, watched, on_focus_change):
|
|
445
|
+
super().__init__(watched)
|
|
446
|
+
self._watched = watched
|
|
447
|
+
self._on_focus_change = on_focus_change
|
|
448
|
+
|
|
430
449
|
def eventFilter(self, watched, event):
|
|
431
|
-
if event.type() in (QEvent.Type.FocusIn, QEvent.Type.FocusOut):
|
|
450
|
+
if watched is self._watched and event.type() in (QEvent.Type.FocusIn, QEvent.Type.FocusOut):
|
|
451
|
+
if callable(self._on_focus_change): self._on_focus_change()
|
|
432
452
|
return super().eventFilter(watched, event)
|
|
453
|
+
|
|
454
|
+
icon_focus_watcher = _IconFocusWatcher(text_box, update_icon)
|
|
455
|
+
text_box.installEventFilter(icon_focus_watcher)
|
|
456
|
+
setattr(text_box, "_icon_focus_watcher", icon_focus_watcher)
|
|
457
|
+
|
|
458
|
+
placeholder_label = create_label(
|
|
459
|
+
text = placeholder_text,
|
|
460
|
+
font_family = font_family,
|
|
461
|
+
font_size = font_size,
|
|
462
|
+
font_color = placeholder_font_color,
|
|
463
|
+
font_weight = font_weight,
|
|
464
|
+
padding = padding,
|
|
465
|
+
padding_left = padding_left,
|
|
466
|
+
padding_top = padding_top,
|
|
467
|
+
padding_right = padding_right,
|
|
468
|
+
padding_bottom = padding_bottom,
|
|
469
|
+
math_expression = math_expression,
|
|
470
|
+
transparent_for_mouse = True,
|
|
471
|
+
parent = text_box
|
|
472
|
+
)
|
|
473
|
+
placeholder_label.move(0, 2)
|
|
474
|
+
|
|
475
|
+
def update_placeholder_visibility():
|
|
476
|
+
has_text = bool(text_box.text().strip())
|
|
477
|
+
has_focus = text_box.hasFocus()
|
|
478
|
+
placeholder_label.setVisible(not has_text and not has_focus)
|
|
479
|
+
if hide_text: update_icon()
|
|
480
|
+
|
|
481
|
+
class _PlaceholderFocusWatcher(QObject):
|
|
433
482
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
483
|
+
def __init__(self, watched, on_focus_change):
|
|
484
|
+
super().__init__(watched)
|
|
485
|
+
self._watched = watched
|
|
486
|
+
self._on_focus_change = on_focus_change
|
|
487
|
+
|
|
488
|
+
def eventFilter(self, watched, event):
|
|
489
|
+
if watched is self._watched and event.type() in (QEvent.Type.FocusIn, QEvent.Type.FocusOut):
|
|
490
|
+
if callable(self._on_focus_change): self._on_focus_change()
|
|
491
|
+
return super().eventFilter(watched, event)
|
|
492
|
+
|
|
493
|
+
placeholder_focus_watcher = _PlaceholderFocusWatcher(text_box, update_placeholder_visibility)
|
|
494
|
+
text_box.installEventFilter(placeholder_focus_watcher)
|
|
495
|
+
setattr(text_box, "_placeholder_focus_watcher", placeholder_focus_watcher)
|
|
496
|
+
update_placeholder_visibility()
|
|
438
497
|
return text_box
|
|
439
498
|
|
|
440
499
|
def create_combo_box(
|
|
@@ -464,21 +523,108 @@ def create_combo_box(
|
|
|
464
523
|
dropdown_background_color = "#1e1e1e",
|
|
465
524
|
dropdown_selection_background_color = "#0078d7",
|
|
466
525
|
dropdown_border_width = 1,
|
|
467
|
-
dropdown_border_color = "#5c5c5c"
|
|
526
|
+
dropdown_border_color = "#5c5c5c",
|
|
527
|
+
math_expression = False,
|
|
528
|
+
parent = None
|
|
468
529
|
):
|
|
469
|
-
combo_box = QComboBox()
|
|
470
|
-
combo_box.
|
|
471
|
-
combo_box.addItems(items)
|
|
472
|
-
combo_box.setCurrentIndex(-1)
|
|
473
|
-
|
|
530
|
+
combo_box = QComboBox(parent)
|
|
531
|
+
combo_box.setAccessibleName("combo_box")
|
|
474
532
|
padding_left_value = padding_left if padding_left is not None else padding
|
|
475
533
|
padding_top_value = padding_top if padding_top is not None else padding
|
|
476
534
|
padding_right_value = padding_right if padding_right is not None else padding
|
|
477
535
|
padding_bottom_value = padding_bottom if padding_bottom is not None else padding
|
|
536
|
+
if math_expression:
|
|
537
|
+
placeholder_label = create_label(
|
|
538
|
+
text = placeholder_text,
|
|
539
|
+
font_family = font_family,
|
|
540
|
+
font_size = font_size,
|
|
541
|
+
font_color = placeholder_font_color,
|
|
542
|
+
padding = padding,
|
|
543
|
+
padding_left = padding_left,
|
|
544
|
+
padding_top = padding_top,
|
|
545
|
+
padding_right = padding_right,
|
|
546
|
+
padding_bottom = padding_bottom,
|
|
547
|
+
math_expression = True,
|
|
548
|
+
transparent_for_mouse = True,
|
|
549
|
+
parent = combo_box
|
|
550
|
+
)
|
|
551
|
+
placeholder_label.move(0, 2)
|
|
478
552
|
|
|
553
|
+
def update_placeholder_visibility():
|
|
554
|
+
has_selection = combo_box.currentIndex() != -1
|
|
555
|
+
placeholder_label.setVisible(not has_selection)
|
|
556
|
+
|
|
557
|
+
combo_box.currentIndexChanged.connect(update_placeholder_visibility)
|
|
558
|
+
update_placeholder_visibility()
|
|
559
|
+
|
|
560
|
+
class RichTextDelegate(QStyledItemDelegate):
|
|
561
|
+
def __init__(
|
|
562
|
+
self,
|
|
563
|
+
parent = None,
|
|
564
|
+
font_color = "#ffffff",
|
|
565
|
+
selection_font_color = "#ffffff"
|
|
566
|
+
):
|
|
567
|
+
super().__init__(parent)
|
|
568
|
+
self.font_color = font_color
|
|
569
|
+
self.selection_font_color = selection_font_color
|
|
570
|
+
|
|
571
|
+
def paint(self, painter, option, index):
|
|
572
|
+
if option.state & QStyle.StateFlag.State_Selected: text_color = self.selection_font_color
|
|
573
|
+
else: text_color = self.font_color
|
|
574
|
+
document = QTextDocument()
|
|
575
|
+
html = f"<span style = \"color:{text_color};\">{index.data(Qt.ItemDataRole.DisplayRole)}</span>"
|
|
576
|
+
document.setHtml(html)
|
|
577
|
+
option.text = ""
|
|
578
|
+
QApplication.style().drawControl(QStyle.ControlElement.CE_ItemViewItem, option, painter)
|
|
579
|
+
painter.save()
|
|
580
|
+
painter.translate(option.rect.left(), option.rect.top() + (option.rect.height() - document.size().height()) / 2)
|
|
581
|
+
document.drawContents(painter)
|
|
582
|
+
painter.restore()
|
|
583
|
+
|
|
584
|
+
delegate = RichTextDelegate(
|
|
585
|
+
parent = combo_box,
|
|
586
|
+
font_color = dropdown_font_color,
|
|
587
|
+
selection_font_color = font_color
|
|
588
|
+
)
|
|
589
|
+
combo_box.setItemDelegate(delegate)
|
|
590
|
+
combo_box.clear()
|
|
591
|
+
for item in items: combo_box.addItem(latex_to_html(item))
|
|
592
|
+
combo_box.view().setTextElideMode(Qt.TextElideMode.ElideNone)
|
|
593
|
+
else:
|
|
594
|
+
combo_box.setPlaceholderText(placeholder_text)
|
|
595
|
+
combo_box.addItems(items)
|
|
596
|
+
combo_box.setCurrentIndex(-1)
|
|
597
|
+
if math_expression:
|
|
598
|
+
selected_item_label = create_label(
|
|
599
|
+
text = "",
|
|
600
|
+
font_family = font_family,
|
|
601
|
+
font_size = font_size,
|
|
602
|
+
font_color = font_color,
|
|
603
|
+
padding = padding,
|
|
604
|
+
padding_left = padding_left,
|
|
605
|
+
padding_top = padding_top,
|
|
606
|
+
padding_right = padding_right,
|
|
607
|
+
padding_bottom = padding_bottom,
|
|
608
|
+
math_expression = True,
|
|
609
|
+
transparent_for_mouse = True,
|
|
610
|
+
alignment = Qt.AlignmentFlag.AlignCenter,
|
|
611
|
+
parent = combo_box
|
|
612
|
+
)
|
|
613
|
+
selected_item_label.setVisible(False)
|
|
614
|
+
|
|
615
|
+
def update_selected_item_display(index):
|
|
616
|
+
if index != -1:
|
|
617
|
+
html_text = combo_box.itemText(index)
|
|
618
|
+
selected_item_label.setText(html_text)
|
|
619
|
+
selected_item_label.setVisible(True)
|
|
620
|
+
else:
|
|
621
|
+
selected_item_label.setVisible(False)
|
|
622
|
+
|
|
623
|
+
combo_box.currentIndexChanged.connect(update_selected_item_display)
|
|
624
|
+
|
|
479
625
|
def get_stylesheet(font_color):
|
|
480
626
|
return f"""
|
|
481
|
-
QComboBox {{
|
|
627
|
+
QComboBox[accessibleName="combo_box"] {{
|
|
482
628
|
font-family: {font_family};
|
|
483
629
|
font-size: {font_size}px;
|
|
484
630
|
color: {font_color};
|
|
@@ -490,12 +636,12 @@ def create_combo_box(
|
|
|
490
636
|
border: {border_width}px solid {border_color};
|
|
491
637
|
border-radius: {border_radius}px;
|
|
492
638
|
}}
|
|
493
|
-
QComboBox:hover {{
|
|
639
|
+
QComboBox[accessibleName="combo_box"]:hover {{
|
|
494
640
|
background-color: {hover_background_color};
|
|
495
641
|
border: {hover_border_width}px solid {hover_border_color};
|
|
496
642
|
}}
|
|
497
|
-
QComboBox:on {{
|
|
498
|
-
color: {on_font_color};
|
|
643
|
+
QComboBox[accessibleName="combo_box"]:on {{
|
|
644
|
+
color: {"transparent" if math_expression else on_font_color};
|
|
499
645
|
background-color: {on_background_color};
|
|
500
646
|
border: {on_border_width}px solid {on_border_color};
|
|
501
647
|
}}
|
|
@@ -504,6 +650,7 @@ def create_combo_box(
|
|
|
504
650
|
background-color: {dropdown_background_color};
|
|
505
651
|
selection-background-color: {dropdown_selection_background_color};
|
|
506
652
|
border: {dropdown_border_width}px solid {dropdown_border_color};
|
|
653
|
+
outline: none;
|
|
507
654
|
}}
|
|
508
655
|
QComboBox::drop-down {{
|
|
509
656
|
border: none;
|
|
@@ -511,8 +658,12 @@ def create_combo_box(
|
|
|
511
658
|
"""
|
|
512
659
|
|
|
513
660
|
def change_color(index):
|
|
514
|
-
if index == -1:
|
|
515
|
-
|
|
661
|
+
if index == -1:
|
|
662
|
+
text_color = "transparent" if math_expression else placeholder_font_color
|
|
663
|
+
combo_box.setStyleSheet(get_stylesheet(text_color))
|
|
664
|
+
else:
|
|
665
|
+
text_color = "transparent" if math_expression else font_color
|
|
666
|
+
combo_box.setStyleSheet(get_stylesheet(text_color))
|
|
516
667
|
|
|
517
668
|
combo_box.currentIndexChanged.connect(change_color)
|
|
518
669
|
change_color(-1)
|
|
@@ -545,9 +696,10 @@ def create_checkbox(
|
|
|
545
696
|
disabled_font_color = "#888888",
|
|
546
697
|
disabled_background_color = "#2d2d2d",
|
|
547
698
|
disabled_border_width = 1,
|
|
548
|
-
disabled_border_color = "#4a4a4a"
|
|
699
|
+
disabled_border_color = "#4a4a4a",
|
|
700
|
+
parent = None
|
|
549
701
|
):
|
|
550
|
-
check_box = QCheckBox(text)
|
|
702
|
+
check_box = QCheckBox(text, parent)
|
|
551
703
|
padding_left_value = padding_left if padding_left is not None else padding
|
|
552
704
|
padding_top_value = padding_top if padding_top is not None else padding
|
|
553
705
|
padding_right_value = padding_right if padding_right is not None else padding
|
|
@@ -638,9 +790,10 @@ def create_information_message_box(
|
|
|
638
790
|
button_disabled_font_color = "#888888",
|
|
639
791
|
button_disabled_background_color = "#2d2d2d",
|
|
640
792
|
button_disabled_border_width = 2,
|
|
641
|
-
button_disabled_border_color = "#4a4a4a"
|
|
793
|
+
button_disabled_border_color = "#4a4a4a",
|
|
794
|
+
parent = None
|
|
642
795
|
):
|
|
643
|
-
message_box = QDialog()
|
|
796
|
+
message_box = QDialog(parent)
|
|
644
797
|
message_box.setObjectName("message_box")
|
|
645
798
|
message_box.setWindowFlags(Qt.WindowType.FramelessWindowHint)
|
|
646
799
|
message_box.setFixedWidth(360)
|
|
@@ -669,10 +822,10 @@ def create_information_message_box(
|
|
|
669
822
|
padding_bottom = label_padding_bottom,
|
|
670
823
|
border_width = label_border_width,
|
|
671
824
|
border_color = label_border_color,
|
|
672
|
-
border_radius = label_border_radius
|
|
825
|
+
border_radius = label_border_radius,
|
|
826
|
+
alignment = Qt.AlignmentFlag.AlignCenter
|
|
673
827
|
)
|
|
674
828
|
main_layout.addWidget(text_label)
|
|
675
|
-
text_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
676
829
|
text_label.setWordWrap(True)
|
|
677
830
|
accept_button = create_button(
|
|
678
831
|
text = button_text,
|
|
@@ -747,9 +900,10 @@ def create_confirmation_message_box(
|
|
|
747
900
|
button_disabled_font_color = "#888888",
|
|
748
901
|
button_disabled_background_color = "#2d2d2d",
|
|
749
902
|
button_disabled_border_width = 2,
|
|
750
|
-
button_disabled_border_color = "#4a4a4a"
|
|
903
|
+
button_disabled_border_color = "#4a4a4a",
|
|
904
|
+
parent = None
|
|
751
905
|
):
|
|
752
|
-
confirm_message_box = QDialog()
|
|
906
|
+
confirm_message_box = QDialog(parent)
|
|
753
907
|
confirm_message_box.setObjectName("confirm_message_box")
|
|
754
908
|
confirm_message_box.setWindowFlags(Qt.WindowType.FramelessWindowHint)
|
|
755
909
|
confirm_message_box.setFixedWidth(360)
|
|
@@ -778,10 +932,10 @@ def create_confirmation_message_box(
|
|
|
778
932
|
padding_bottom = label_padding_bottom,
|
|
779
933
|
border_width = label_border_width,
|
|
780
934
|
border_color = label_border_color,
|
|
781
|
-
border_radius = label_border_radius
|
|
935
|
+
border_radius = label_border_radius,
|
|
936
|
+
alignment = Qt.AlignmentFlag.AlignCenter
|
|
782
937
|
)
|
|
783
938
|
main_layout.addWidget(text_label)
|
|
784
|
-
text_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
785
939
|
text_label.setWordWrap(True)
|
|
786
940
|
buttons_layout = QHBoxLayout()
|
|
787
941
|
main_layout.addLayout(buttons_layout)
|
|
@@ -876,9 +1030,10 @@ def create_list_table(
|
|
|
876
1030
|
hover_scrollbar_handle_border_color = "#777777",
|
|
877
1031
|
pressed_scrollbar_handle_background_color = "#4a4a4a",
|
|
878
1032
|
pressed_scrollbar_handle_border_width = 3,
|
|
879
|
-
pressed_scrollbar_handle_border_color = "#0078d7"
|
|
1033
|
+
pressed_scrollbar_handle_border_color = "#0078d7",
|
|
1034
|
+
parent = None
|
|
880
1035
|
):
|
|
881
|
-
list_table = QTableWidget()
|
|
1036
|
+
list_table = QTableWidget(parent)
|
|
882
1037
|
list_table.verticalHeader().setVisible(False)
|
|
883
1038
|
list_table.setColumnCount(len(column_headers))
|
|
884
1039
|
list_table.setHorizontalHeaderLabels(column_headers)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
gui_utilities/gui_utilities.py,sha256=
|
|
1
|
+
gui_utilities/gui_utilities.py,sha256=QbleCgOLya9TDIoADbM-uY42psMSXskxAD68Ts0T3cE,52535
|
|
2
2
|
gui_utilities/icons/focused_hide_text_icon.png,sha256=0Ysx7vC-mEVfuSBWx1Zw-UhpqvrTCcIvnQ926wFmuK4,13084
|
|
3
3
|
gui_utilities/icons/focused_show_text_icon.png,sha256=gmZU7RR4FN-9VSzpD00ZkQ8UGbihO2y808Kh3b_TaEg,6739
|
|
4
4
|
gui_utilities/icons/hide_text_icon.png,sha256=f5jq6KaAygWNjzP_Ah6dw6eu8q5ml3m56JTeNSTSgEU,7207
|
|
5
5
|
gui_utilities/icons/show_text_icon.png,sha256=8Vdp2XickPEM-eTb1-qBXf3qmHldSzllMZZfObir9p8,5376
|
|
6
6
|
gui_utilities/tlds/tlds_list.txt,sha256=wIWmAQGVNsY0ZJy7qPW8kItDTCE4PTq8wcUhC2hpjkw,10916
|
|
7
|
-
gui_utilities-1.3.
|
|
8
|
-
gui_utilities-1.3.
|
|
9
|
-
gui_utilities-1.3.
|
|
10
|
-
gui_utilities-1.3.
|
|
11
|
-
gui_utilities-1.3.
|
|
7
|
+
gui_utilities-1.3.49.dist-info/licenses/LICENSE,sha256=NNoMFs43kWl1J-aqq7_EsPlBjL5XTccWjZlwrlCR-Xc,1093
|
|
8
|
+
gui_utilities-1.3.49.dist-info/METADATA,sha256=5P5GUF9xkEHS_Ibx0CBdKG_QzolDjVJ0w0ne-_PxIpA,266
|
|
9
|
+
gui_utilities-1.3.49.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
10
|
+
gui_utilities-1.3.49.dist-info/top_level.txt,sha256=c4C84nMT41keiX9b1AJJZDBU3kA38c7vOmP9kDie8Lk,14
|
|
11
|
+
gui_utilities-1.3.49.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|