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.
@@ -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 create_window(title, background_color = "#1e1e1e"):
13
- window = QWidget()
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(" ", "&nbsp;")
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
- label = QLabel(text)
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(" ", "&nbsp;")
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
- style_sheet = f"""
407
- QToolButton {{
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
- toggle_text_visibility_button.setStyleSheet(style_sheet)
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 FocusWatcher(QObject):
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): update_icon()
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
- focus_watcher = FocusWatcher(text_box)
435
- text_box.installEventFilter(focus_watcher)
436
- setattr(text_box, "focus_watcher", focus_watcher)
437
- update_icon()
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.setPlaceholderText(f"{placeholder_text}")
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: combo_box.setStyleSheet(get_stylesheet(placeholder_font_color))
515
- else: combo_box.setStyleSheet(get_stylesheet(font_color))
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gui_utilities
3
- Version: 1.3.27
3
+ Version: 1.3.49
4
4
  Summary: Librería de utilidades gráficas en PyQt6
5
5
  Author-email: Guido Iván Gross <grossguidoivan@gmail.com>
6
6
  Requires-Python: >=3.8
@@ -1,11 +1,11 @@
1
- gui_utilities/gui_utilities.py,sha256=dy0LllUZ5mC09HdhMfTzvj1kzNBeztyJPNNUsu_6H0c,46185
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.27.dist-info/licenses/LICENSE,sha256=NNoMFs43kWl1J-aqq7_EsPlBjL5XTccWjZlwrlCR-Xc,1093
8
- gui_utilities-1.3.27.dist-info/METADATA,sha256=168zHVeB2toYacokpwO1kmBFZalHF3vxp5CQtGdmNIo,266
9
- gui_utilities-1.3.27.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
10
- gui_utilities-1.3.27.dist-info/top_level.txt,sha256=c4C84nMT41keiX9b1AJJZDBU3kA38c7vOmP9kDie8Lk,14
11
- gui_utilities-1.3.27.dist-info/RECORD,,
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,,