frontengine-dev 0.0.66__tar.gz → 0.0.68__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 (118) hide show
  1. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/PKG-INFO +1 -1
  2. frontengine_dev-0.0.68/frontengine/show/clicker/clicker_scene.py +7 -0
  3. frontengine_dev-0.0.68/frontengine/show/clicker/clicker_ui.py +30 -0
  4. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/show/particle/particle_scene.py +19 -13
  5. frontengine_dev-0.0.66/frontengine/show/particle/paint_particle.py → frontengine_dev-0.0.68/frontengine/show/particle/particle_ui.py +13 -19
  6. frontengine_dev-0.0.68/frontengine/show/particle/particle_utils.py +61 -0
  7. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/show/video/video_player.py +1 -0
  8. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/main_ui.py +11 -20
  9. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/control_center/control_center_ui.py +5 -1
  10. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/gif/gif_setting_ui.py +9 -7
  11. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/image/image_setting_ui.py +12 -9
  12. frontengine_dev-0.0.68/frontengine/ui/page/particle/particle_setting_ui.py +175 -0
  13. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/utils.py +14 -1
  14. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/video/video_setting_ui.py +9 -7
  15. frontengine_dev-0.0.68/frontengine/utils/logging/__init__.py +0 -0
  16. frontengine_dev-0.0.68/frontengine/utils/multi_language/__init__.py +0 -0
  17. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/multi_language/english.py +8 -0
  18. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/multi_language/france.py +8 -0
  19. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/multi_language/germany.py +8 -0
  20. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/multi_language/italy.py +8 -0
  21. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/multi_language/russian.py +8 -0
  22. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/multi_language/simplified_chinese.py +8 -0
  23. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/multi_language/traditional_chinese.py +8 -0
  24. frontengine_dev-0.0.68/frontengine/utils/redirect_manager/__init__.py +0 -0
  25. frontengine_dev-0.0.68/frontengine/worker/__init__.py +0 -0
  26. frontengine_dev-0.0.68/frontengine/worker/qthread_worker.py +34 -0
  27. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine_dev.egg-info/PKG-INFO +1 -1
  28. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine_dev.egg-info/SOURCES.txt +9 -1
  29. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/pyproject.toml +1 -1
  30. frontengine_dev-0.0.66/frontengine/show/particle/particle_utils.py +0 -75
  31. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/LICENSE +0 -0
  32. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/README.md +0 -0
  33. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/__init__.py +0 -0
  34. {frontengine_dev-0.0.66/frontengine/show → frontengine_dev-0.0.68/frontengine/gl_widget}/__init__.py +0 -0
  35. {frontengine_dev-0.0.66/frontengine/show/gif → frontengine_dev-0.0.68/frontengine/show}/__init__.py +0 -0
  36. {frontengine_dev-0.0.66/frontengine/show/image → frontengine_dev-0.0.68/frontengine/show/clicker}/__init__.py +0 -0
  37. {frontengine_dev-0.0.66/frontengine/show/load → frontengine_dev-0.0.68/frontengine/show/gif}/__init__.py +0 -0
  38. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/show/gif/paint_gif.py +0 -0
  39. {frontengine_dev-0.0.66/frontengine/show/particle → frontengine_dev-0.0.68/frontengine/show/image}/__init__.py +0 -0
  40. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/show/image/paint_image.py +0 -0
  41. {frontengine_dev-0.0.66/frontengine/show/scene → frontengine_dev-0.0.68/frontengine/show/load}/__init__.py +0 -0
  42. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/show/load/load_someone_make_ui.py +0 -0
  43. {frontengine_dev-0.0.66/frontengine/show/sound_player → frontengine_dev-0.0.68/frontengine/show/particle}/__init__.py +0 -0
  44. {frontengine_dev-0.0.66/frontengine/show/text → frontengine_dev-0.0.68/frontengine/show/scene}/__init__.py +0 -0
  45. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/show/scene/extend_graphic_scene.py +0 -0
  46. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/show/scene/extend_graphic_view.py +0 -0
  47. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/show/scene/scene.py +0 -0
  48. {frontengine_dev-0.0.66/frontengine/show/video → frontengine_dev-0.0.68/frontengine/show/sound_player}/__init__.py +0 -0
  49. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/show/sound_player/sound_effect.py +0 -0
  50. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/show/sound_player/sound_player.py +0 -0
  51. {frontengine_dev-0.0.66/frontengine/show/web → frontengine_dev-0.0.68/frontengine/show/text}/__init__.py +0 -0
  52. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/show/text/draw_text.py +0 -0
  53. {frontengine_dev-0.0.66/frontengine/system_tray → frontengine_dev-0.0.68/frontengine/show/video}/__init__.py +0 -0
  54. {frontengine_dev-0.0.66/frontengine/ui → frontengine_dev-0.0.68/frontengine/show/web}/__init__.py +0 -0
  55. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/show/web/webview.py +0 -0
  56. {frontengine_dev-0.0.66/frontengine/ui/color → frontengine_dev-0.0.68/frontengine/system_tray}/__init__.py +0 -0
  57. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/system_tray/extend_system_tray.py +0 -0
  58. {frontengine_dev-0.0.66/frontengine/ui/dialog → frontengine_dev-0.0.68/frontengine/ui}/__init__.py +0 -0
  59. {frontengine_dev-0.0.66/frontengine/ui/menu → frontengine_dev-0.0.68/frontengine/ui/color}/__init__.py +0 -0
  60. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/color/global_color.py +0 -0
  61. {frontengine_dev-0.0.66/frontengine/ui/page → frontengine_dev-0.0.68/frontengine/ui/dialog}/__init__.py +0 -0
  62. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/dialog/choose_file_dialog.py +0 -0
  63. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/dialog/save_file_dialog.py +0 -0
  64. {frontengine_dev-0.0.66/frontengine/ui/page/control_center → frontengine_dev-0.0.68/frontengine/ui/menu}/__init__.py +0 -0
  65. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/menu/help_menu.py +0 -0
  66. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/menu/how_to_menu.py +0 -0
  67. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/menu/language_menu.py +0 -0
  68. {frontengine_dev-0.0.66/frontengine/ui/page/gif → frontengine_dev-0.0.68/frontengine/ui/page}/__init__.py +0 -0
  69. {frontengine_dev-0.0.66/frontengine/ui/page/image → frontengine_dev-0.0.68/frontengine/ui/page/control_center}/__init__.py +0 -0
  70. {frontengine_dev-0.0.66/frontengine/ui/page/scene_setting → frontengine_dev-0.0.68/frontengine/ui/page/gif}/__init__.py +0 -0
  71. {frontengine_dev-0.0.66/frontengine/ui/page/scene_setting/scene_page → frontengine_dev-0.0.68/frontengine/ui/page/image}/__init__.py +0 -0
  72. {frontengine_dev-0.0.66/frontengine/ui/page/sound_player → frontengine_dev-0.0.68/frontengine/ui/page/particle}/__init__.py +0 -0
  73. {frontengine_dev-0.0.66/frontengine/ui/page/text → frontengine_dev-0.0.68/frontengine/ui/page/scene_setting}/__init__.py +0 -0
  74. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/scene_setting/scene_manager.py +0 -0
  75. {frontengine_dev-0.0.66/frontengine/ui/page/video → frontengine_dev-0.0.68/frontengine/ui/page/scene_setting/scene_page}/__init__.py +0 -0
  76. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/scene_setting/scene_page/gif.py +0 -0
  77. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/scene_setting/scene_page/image.py +0 -0
  78. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/scene_setting/scene_page/sound.py +0 -0
  79. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/scene_setting/scene_page/text.py +0 -0
  80. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/scene_setting/scene_page/video.py +0 -0
  81. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/scene_setting/scene_page/web.py +0 -0
  82. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/scene_setting/scene_setting_ui.py +0 -0
  83. {frontengine_dev-0.0.66/frontengine/ui/page/web → frontengine_dev-0.0.68/frontengine/ui/page/sound_player}/__init__.py +0 -0
  84. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/sound_player/sound_player_setting_ui.py +0 -0
  85. {frontengine_dev-0.0.66/frontengine/user_setting → frontengine_dev-0.0.68/frontengine/ui/page/text}/__init__.py +0 -0
  86. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/text/text_setting_ui.py +0 -0
  87. {frontengine_dev-0.0.66/frontengine/utils → frontengine_dev-0.0.68/frontengine/ui/page/video}/__init__.py +0 -0
  88. {frontengine_dev-0.0.66/frontengine/utils/browser → frontengine_dev-0.0.68/frontengine/ui/page/web}/__init__.py +0 -0
  89. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/ui/page/web/web_setting_ui.py +0 -0
  90. {frontengine_dev-0.0.66/frontengine/utils/critical_exit → frontengine_dev-0.0.68/frontengine/user_setting}/__init__.py +0 -0
  91. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/user_setting/scene_setting.py +0 -0
  92. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/user_setting/user_setting_file.py +0 -0
  93. {frontengine_dev-0.0.66/frontengine/utils/file → frontengine_dev-0.0.68/frontengine/utils}/__init__.py +0 -0
  94. {frontengine_dev-0.0.66/frontengine/utils/json → frontengine_dev-0.0.68/frontengine/utils/browser}/__init__.py +0 -0
  95. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/browser/browser.py +0 -0
  96. {frontengine_dev-0.0.66/frontengine/utils/logging → frontengine_dev-0.0.68/frontengine/utils/critical_exit}/__init__.py +0 -0
  97. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/critical_exit/check_key_is_press.py +0 -0
  98. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/critical_exit/critical_exit.py +0 -0
  99. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/critical_exit/win32_vk.py +0 -0
  100. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/exception/__init__.py +0 -0
  101. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/exception/exception_tags.py +0 -0
  102. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/exception/exceptions.py +0 -0
  103. {frontengine_dev-0.0.66/frontengine/utils/multi_language → frontengine_dev-0.0.68/frontengine/utils/file}/__init__.py +0 -0
  104. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/file/open/__init__.py +0 -0
  105. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/file/open/open_file.py +0 -0
  106. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/file/save/__init__.py +0 -0
  107. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/file/save/save_file.py +0 -0
  108. {frontengine_dev-0.0.66/frontengine/utils/redirect_manager → frontengine_dev-0.0.68/frontengine/utils/json}/__init__.py +0 -0
  109. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/json/json_file.py +0 -0
  110. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/json_format/__init__.py +0 -0
  111. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/json_format/json_process.py +0 -0
  112. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/logging/loggin_instance.py +0 -0
  113. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/multi_language/language_wrapper.py +0 -0
  114. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine/utils/redirect_manager/redirect_manager_class.py +0 -0
  115. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine_dev.egg-info/dependency_links.txt +0 -0
  116. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine_dev.egg-info/requires.txt +0 -0
  117. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/frontengine_dev.egg-info/top_level.txt +0 -0
  118. {frontengine_dev-0.0.66 → frontengine_dev-0.0.68}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: frontengine_dev
3
- Version: 0.0.66
3
+ Version: 0.0.68
4
4
  Summary: FrontEngine is BingGPT that can use-define front end or only use like screen saver
5
5
  Author-email: JE-Chen <jechenmailman@gmail.com>
6
6
  License: MIT
@@ -0,0 +1,7 @@
1
+ from PySide6.QtWidgets import QGraphicsScene
2
+
3
+
4
+ class ClickerGraphicScene(QGraphicsScene):
5
+
6
+ def __init__(self):
7
+ super().__init__()
@@ -0,0 +1,30 @@
1
+ from PySide6.QtCore import Qt
2
+ from PySide6.QtWidgets import QWidget, QGridLayout
3
+
4
+ from frontengine.show.clicker.clicker_scene import ClickerGraphicScene
5
+ from frontengine.show.scene.extend_graphic_view import ExtendGraphicView
6
+
7
+
8
+ class ClickerWidget(QWidget):
9
+
10
+ def __init__(self):
11
+ super().__init__()
12
+ self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
13
+ self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
14
+ self.clicker_view = ExtendGraphicView()
15
+ self.clicker_scene = ClickerGraphicScene()
16
+ self.clicker_view.setScene(self.clicker_scene)
17
+ self.grid_layout = QGridLayout()
18
+ self.grid_layout.addWidget(self.clicker_view, 0, 0, -1, -1)
19
+ self.setLayout(self.grid_layout)
20
+
21
+ def set_ui_window_flag(self, show_on_bottom: bool = False) -> None:
22
+ self.setWindowFlag(
23
+ Qt.WindowType.WindowTransparentForInput |
24
+ Qt.WindowType.FramelessWindowHint |
25
+ Qt.WindowType.Tool
26
+ )
27
+ if not show_on_bottom:
28
+ self.setWindowFlag(Qt.WindowType.WindowStaysOnTopHint)
29
+ else:
30
+ self.setWindowFlag(Qt.WindowType.WindowStaysOnBottomHint)
@@ -1,11 +1,12 @@
1
+ import random
1
2
  from typing import Callable
2
3
 
3
4
  from PySide6.QtCore import QTimer, QPoint, QRect
4
5
  from PySide6.QtGui import QPixmap
5
- from PySide6.QtWidgets import QGraphicsScene, QWidget
6
+ from PySide6.QtWidgets import QGraphicsScene
6
7
 
7
8
  from frontengine.show.particle.particle_utils import particle_down, particle_up, particle_left, particle_right, \
8
- particle_left_down, particle_left_up, particle_right_down, particle_right_up, particle_random_minus, Particle, \
9
+ particle_left_down, particle_left_up, particle_right_down, particle_right_up, particle_random_minus, \
9
10
  particle_random_add, particle_random
10
11
 
11
12
 
@@ -40,26 +41,31 @@ class ParticleGraphicScene(QGraphicsScene):
40
41
  }.get(self.particle_direction)
41
42
  self.setSceneRect(QRect(0, 0, screen_width, screen_height))
42
43
  self.update_timer: QTimer = QTimer()
43
- self.update_timer.setInterval(10)
44
- self.update_timer.timeout.connect(self.update_particle)
44
+ self.update_timer.setInterval(100)
45
+ self.update_timer.timeout.connect(self.update_particle_xy)
45
46
  self.update_timer.start()
46
47
 
47
48
  def create_particle(self):
48
49
  self.particle_dict = {}
49
50
  for count in range(self.particle_count):
51
+ item = self.addPixmap(self.particle_pixmap)
52
+ item.setOpacity(self.opacity)
50
53
  self.particle_dict.update({
51
- f"particle_{count}": Particle(self.screen_height, self.screen_width, self.particle_pixmap)
54
+ f"particle_{count}": {
55
+ "x": random.randint(0, self.screen_width),
56
+ "y": random.randint(0, self.screen_height),
57
+ "height": self.screen_height,
58
+ "width": self.screen_width,
59
+ "pixmap_item": item,
60
+ }
52
61
  })
53
62
 
54
- def update_particle(self):
55
- self.clear()
63
+ def update_particle_xy(self):
56
64
  self.update_function(self.particle_dict, self.particle_speed)
57
65
  for particle_key, particle in self.particle_dict.items():
58
- pixmap_item = self.addPixmap(particle.pixmap)
59
- pixmap_item.setOpacity(self.opacity)
60
- pixmap_item.setPos(particle.x, particle.y)
61
- particle.pixmap_item = pixmap_item
62
- if not self.sceneRect().contains(QPoint(particle.x, particle.y)):
63
- self.removeItem(particle.pixmap_item)
66
+ pixmap_item = particle.get("pixmap_item")
67
+ pixmap_item.setPos(particle.get("x"), particle.get("y"))
68
+ if not self.sceneRect().contains(QPoint(particle.get("x"), particle.get("y"))):
69
+ self.removeItem(particle.get("pixmap_item"))
64
70
  if len(self.items()) == 0:
65
71
  self.create_particle()
@@ -1,9 +1,6 @@
1
- import sys
2
-
3
1
  from PySide6.QtCore import QSize
4
2
  from PySide6.QtGui import QPixmap, Qt
5
- from PySide6.QtWidgets import QWidget, QApplication, QMainWindow, QGridLayout
6
- from qt_material import QtStyleTools
3
+ from PySide6.QtWidgets import QWidget, QGridLayout
7
4
 
8
5
  from frontengine.show.particle.particle_scene import ParticleGraphicScene
9
6
  from frontengine.show.scene.extend_graphic_view import ExtendGraphicView
@@ -15,6 +12,8 @@ class ParticleWidget(QWidget):
15
12
  screen_height: int = 1080, screen_width: int = 1920, opacity: float = 0.2,
16
13
  particle_speed: int = 1):
17
14
  super().__init__()
15
+ self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
16
+ self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
18
17
  if particle_size:
19
18
  self.pixmap = pixmap.scaled(QSize(particle_size, particle_size), Qt.AspectRatioMode.KeepAspectRatio)
20
19
  else:
@@ -28,18 +27,13 @@ class ParticleWidget(QWidget):
28
27
  self.grid_layout.addWidget(self.particle_view, 0, 0, -1, -1)
29
28
  self.setLayout(self.grid_layout)
30
29
 
31
-
32
- class TestUI(QMainWindow, QtStyleTools):
33
-
34
- def __init__(self):
35
- super().__init__()
36
- self.pixmap = QPixmap("pipi.png")
37
- self.main_widget = ParticleWidget(self.pixmap, 64, "random_add", particle_count=500)
38
- self.setCentralWidget(self.main_widget)
39
- self.showMaximized()
40
-
41
-
42
- if __name__ == "__main__":
43
- main_app = QApplication(sys.argv)
44
- window = TestUI()
45
- sys.exit(main_app.exec())
30
+ def set_ui_window_flag(self, show_on_bottom: bool = False) -> None:
31
+ self.setWindowFlag(
32
+ Qt.WindowType.WindowTransparentForInput |
33
+ Qt.WindowType.FramelessWindowHint |
34
+ Qt.WindowType.Tool
35
+ )
36
+ if not show_on_bottom:
37
+ self.setWindowFlag(Qt.WindowType.WindowStaysOnTopHint)
38
+ else:
39
+ self.setWindowFlag(Qt.WindowType.WindowStaysOnBottomHint)
@@ -0,0 +1,61 @@
1
+ import random
2
+ from typing import Dict, Callable
3
+
4
+
5
+ def particle_down(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
6
+ for particle in particle_dict.values():
7
+ particle.update({"y": particle.get("y") + random.randint(0, particle_speed)})
8
+
9
+
10
+ def particle_up(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
11
+ for particle in particle_dict.values():
12
+ particle.update({"y": particle.get("y") - random.randint(0, particle_speed)})
13
+
14
+
15
+ def particle_left(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
16
+ for particle in particle_dict.values():
17
+ particle.update({"x": particle.get("x") - random.randint(0, particle_speed)})
18
+
19
+
20
+ def particle_right(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
21
+ for particle in particle_dict.values():
22
+ particle.update({"x": particle.get("x") + random.randint(0, particle_speed)})
23
+
24
+
25
+ def particle_left_down(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
26
+ particle_left(particle_dict, particle_speed)
27
+ particle_down(particle_dict, particle_speed)
28
+
29
+
30
+ def particle_left_up(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
31
+ particle_left(particle_dict, particle_speed)
32
+ particle_up(particle_dict, particle_speed)
33
+
34
+
35
+ def particle_right_down(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
36
+ particle_right(particle_dict, particle_speed)
37
+ particle_down(particle_dict, particle_speed)
38
+
39
+
40
+ def particle_right_up(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
41
+ particle_right(particle_dict, particle_speed)
42
+ particle_up(particle_dict, particle_speed)
43
+
44
+
45
+ def particle_random_minus(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
46
+ for particle in particle_dict.values():
47
+ particle.update({"y": particle.get("y") + random.randint(0, particle_speed)})
48
+ particle.update({"x": particle.get("x") - random.randint(0, particle_speed)})
49
+
50
+
51
+ def particle_random_add(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
52
+ for particle in particle_dict.values():
53
+ particle.update({"y": particle.get("y") - random.randint(0, particle_speed)})
54
+ particle.update({"x": particle.get("x") + random.randint(0, particle_speed)})
55
+
56
+
57
+ def particle_random(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
58
+ function: Callable = random.choice(
59
+ [particle_down, particle_up, particle_left, particle_right, particle_right_up, particle_left_down,
60
+ particle_left_up, particle_right_down, particle_random_add, particle_random_minus])
61
+ function(particle_dict, particle_speed)
@@ -45,6 +45,7 @@ class VideoWidget(QVideoWidget):
45
45
  if self.icon_path.exists() and self.icon_path.is_file():
46
46
  self.setWindowIcon(QIcon(str(self.icon_path)))
47
47
 
48
+
48
49
  def set_ui_window_flag(self, show_on_bottom: bool = False) -> None:
49
50
  self.setWindowFlag(
50
51
  Qt.WindowType.WindowTransparentForInput |
@@ -4,9 +4,9 @@ from pathlib import Path
4
4
  from typing import Dict, Type
5
5
 
6
6
  from PySide6.QtCore import QTimer, QCoreApplication
7
- from PySide6.QtGui import QIcon, QAction, Qt
7
+ from PySide6.QtGui import QIcon, Qt
8
8
  from PySide6.QtWidgets import QMainWindow, QApplication, QGridLayout, QTabWidget, QMenuBar, QWidget
9
- from qt_material import apply_stylesheet, QtStyleTools
9
+ from qt_material import apply_stylesheet
10
10
 
11
11
  from frontengine.system_tray.extend_system_tray import ExtendSystemTray
12
12
  from frontengine.ui.menu.help_menu import build_help_menu
@@ -15,6 +15,7 @@ from frontengine.ui.menu.language_menu import build_language_menu
15
15
  from frontengine.ui.page.control_center.control_center_ui import ControlCenterUI
16
16
  from frontengine.ui.page.gif.gif_setting_ui import GIFSettingUI
17
17
  from frontengine.ui.page.image.image_setting_ui import ImageSettingUI
18
+ from frontengine.ui.page.particle.particle_setting_ui import ParticleSettingUI
18
19
  from frontengine.ui.page.scene_setting.scene_setting_ui import SceneSettingUI
19
20
  from frontengine.ui.page.sound_player.sound_player_setting_ui import SoundPlayerSettingUI
20
21
  from frontengine.ui.page.text.text_setting_ui import TextSettingUI
@@ -28,7 +29,7 @@ from frontengine.utils.multi_language.language_wrapper import language_wrapper
28
29
  FrontEngine_EXTEND_TAB: Dict[str, Type[QWidget]] = {}
29
30
 
30
31
 
31
- class FrontEngineMainUI(QMainWindow, QtStyleTools):
32
+ class FrontEngineMainUI(QMainWindow):
32
33
 
33
34
  def __init__(self, debug: bool = False, show_system_tray_ray: bool = True):
34
35
  super().__init__()
@@ -55,6 +56,7 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
55
56
  self.sound_player_setting_ui = SoundPlayerSettingUI()
56
57
  self.text_setting_ui = TextSettingUI()
57
58
  self.scene_setting_ui = SceneSettingUI()
59
+ self.particle_setting_ui = ParticleSettingUI()
58
60
  self.control_center_ui = ControlCenterUI(
59
61
  self.video_setting_ui,
60
62
  self.image_setting_ui,
@@ -62,11 +64,11 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
62
64
  self.gif_setting_ui,
63
65
  self.sound_player_setting_ui,
64
66
  self.text_setting_ui,
65
- self.scene_setting_ui
67
+ self.scene_setting_ui,
68
+ self.particle_setting_ui
66
69
  )
67
70
  # Style menu bar
68
71
  self.menu_bar = QMenuBar()
69
- self.add_style_menu()
70
72
  self.setMenuBar(self.menu_bar)
71
73
  self.tab_widget.addTab(
72
74
  self.video_setting_ui, language_wrapper.language_word_dict.get("tab_video_text"))
@@ -90,6 +92,10 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
90
92
  self.scene_setting_ui,
91
93
  language_wrapper.language_word_dict.get("tab_scene_text")
92
94
  )
95
+ self.tab_widget.addTab(
96
+ self.particle_setting_ui,
97
+ language_wrapper.language_word_dict.get("tab_particle_text")
98
+ )
93
99
  self.tab_widget.addTab(
94
100
  self.control_center_ui,
95
101
  language_wrapper.language_word_dict.get("tab_control_center_text")
@@ -124,22 +130,7 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
124
130
  apply_stylesheet(self, theme=user_setting_dict.get("theme"))
125
131
  self.showMaximized()
126
132
 
127
- def add_style_menu(self) -> None:
128
- self.menu_bar.style_menu = self.menu_bar.addMenu(
129
- language_wrapper.language_word_dict.get("menu_bar_ui_style")
130
- )
131
- for style in [
132
- 'dark_amber.xml', 'dark_blue.xml', 'dark_cyan.xml', 'dark_lightgreen.xml', 'dark_pink.xml',
133
- 'dark_purple.xml', 'dark_red.xml', 'dark_teal.xml', 'dark_yellow.xml', 'light_amber.xml',
134
- 'light_blue.xml', 'light_cyan.xml', 'light_cyan_500.xml', 'light_lightgreen.xml',
135
- 'light_pink.xml', 'light_purple.xml', 'light_red.xml', 'light_teal.xml', 'light_yellow.xml'
136
- ]:
137
- change_style_action = QAction(style, parent=self)
138
- change_style_action.triggered.connect(self.set_style)
139
- self.menu_bar.style_menu.addAction(change_style_action)
140
-
141
133
  def set_style(self) -> None:
142
- self.apply_stylesheet(self, self.sender().text())
143
134
  user_setting_dict.update({"theme": self.sender().text()})
144
135
 
145
136
  def closeEvent(self, event) -> None:
@@ -4,6 +4,7 @@ from PySide6.QtWidgets import QGridLayout, QWidget, QPushButton, QTextEdit, QScr
4
4
  from frontengine.ui.color.global_color import error_color, output_color
5
5
  from frontengine.ui.page.gif.gif_setting_ui import GIFSettingUI
6
6
  from frontengine.ui.page.image.image_setting_ui import ImageSettingUI
7
+ from frontengine.ui.page.particle.particle_setting_ui import ParticleSettingUI
7
8
  from frontengine.ui.page.scene_setting.scene_setting_ui import SceneSettingUI
8
9
  from frontengine.ui.page.sound_player.sound_player_setting_ui import SoundPlayerSettingUI
9
10
  from frontengine.ui.page.text.text_setting_ui import TextSettingUI
@@ -24,7 +25,8 @@ class ControlCenterUI(QWidget):
24
25
  gif_setting_ui: GIFSettingUI,
25
26
  sound_player_setting_ui: SoundPlayerSettingUI,
26
27
  text_setting_ui: TextSettingUI,
27
- scene_setting_ui: SceneSettingUI
28
+ scene_setting_ui: SceneSettingUI,
29
+ particle_setting_ui: ParticleSettingUI
28
30
  ):
29
31
  super().__init__()
30
32
  # Layout
@@ -39,6 +41,7 @@ class ControlCenterUI(QWidget):
39
41
  self.sound_player_setting_ui = sound_player_setting_ui
40
42
  self.text_setting_ui = text_setting_ui
41
43
  self.scene_setting_ui = scene_setting_ui
44
+ self.particle_setting_ui = particle_setting_ui
42
45
  # Close video widget
43
46
  self.clear_video_button = QPushButton(
44
47
  language_wrapper.language_word_dict.get("control_center_close_all_video")
@@ -155,6 +158,7 @@ class ControlCenterUI(QWidget):
155
158
  self.gif_setting_ui.gif_widget_list.clear()
156
159
  self.sound_player_setting_ui.sound_widget_list.clear()
157
160
  self.text_setting_ui.text_widget_list.clear()
161
+ self.particle_setting_ui.particle_list.clear()
158
162
  self.scene_setting_ui.close_scene()
159
163
 
160
164
  def redirect(self) -> None:
@@ -5,7 +5,7 @@ from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QSlider, QPushButton
5
5
 
6
6
  from frontengine.show.gif.paint_gif import GifWidget
7
7
  from frontengine.ui.dialog.choose_file_dialog import choose_gif
8
- from frontengine.ui.page.utils import monitor_choose_dialog
8
+ from frontengine.ui.page.utils import monitor_choose_dialog, check_show_fullscreen
9
9
  from frontengine.utils.logging.loggin_instance import front_engine_logger
10
10
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
11
11
 
@@ -61,6 +61,11 @@ class GIFSettingUI(QWidget):
61
61
  language_wrapper.language_word_dict.get("gif_setting_ui_play")
62
62
  )
63
63
  self.start_button.clicked.connect(self.start_play_gif)
64
+ # Expand
65
+ self.fullscreen_checkbox = QCheckBox(
66
+ language_wrapper.language_word_dict.get("fullscreen_checkbox_label")
67
+ )
68
+ self.fullscreen_checkbox.setChecked(True)
64
69
  # Show on all screen
65
70
  self.show_on_all_screen_checkbox = QCheckBox(
66
71
  language_wrapper.language_word_dict.get("Show on all screen")
@@ -79,6 +84,7 @@ class GIFSettingUI(QWidget):
79
84
  self.grid_layout.addWidget(self.speed_slider, 1, 2)
80
85
  self.grid_layout.addWidget(self.choose_file_button, 2, 0)
81
86
  self.grid_layout.addWidget(self.ready_label, 2, 1)
87
+ self.grid_layout.addWidget(self.fullscreen_checkbox, 2, 2)
82
88
  self.grid_layout.addWidget(self.start_button, 3, 0)
83
89
  self.grid_layout.addWidget(self.show_on_all_screen_checkbox, 3, 1)
84
90
  self.grid_layout.addWidget(self.show_on_bottom_checkbox, 3, 2)
@@ -116,15 +122,11 @@ class GIFSettingUI(QWidget):
116
122
  if len(monitors) > select_monitor_index:
117
123
  monitor = monitors[select_monitor_index]
118
124
  gif_widget = self._create_gif_widget()
119
- gif_widget.setScreen(monitor)
120
- gif_widget.move(monitor.availableGeometry().topLeft())
121
- gif_widget.showFullScreen()
125
+ check_show_fullscreen(gif_widget, self.fullscreen_checkbox, monitor)
122
126
  else:
123
127
  for monitor in monitors:
124
128
  gif_widget = self._create_gif_widget()
125
- gif_widget.setScreen(monitor)
126
- gif_widget.move(monitor.availableGeometry().topLeft())
127
- gif_widget.showFullScreen()
129
+ check_show_fullscreen(gif_widget, self.fullscreen_checkbox, monitor)
128
130
 
129
131
  def choose_and_copy_file_to_cwd_gif_dir_then_play(self) -> None:
130
132
  self.ready_label.setText(
@@ -1,11 +1,11 @@
1
1
  from PySide6.QtCore import Qt
2
- from PySide6.QtGui import QScreen, QGuiApplication
2
+ from PySide6.QtGui import QGuiApplication
3
3
  from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QPushButton, QMessageBox, \
4
4
  QCheckBox, QDialog
5
5
 
6
6
  from frontengine.show.image.paint_image import ImageWidget
7
7
  from frontengine.ui.dialog.choose_file_dialog import choose_image
8
- from frontengine.ui.page.utils import monitor_choose_dialog
8
+ from frontengine.ui.page.utils import monitor_choose_dialog, check_show_fullscreen
9
9
  from frontengine.utils.logging.loggin_instance import front_engine_logger
10
10
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
11
11
 
@@ -50,6 +50,11 @@ class ImageSettingUI(QWidget):
50
50
  language_wrapper.language_word_dict.get("image_setting_ui_play")
51
51
  )
52
52
  self.start_button.clicked.connect(self.start_play_image)
53
+ # Expand
54
+ self.fullscreen_checkbox = QCheckBox(
55
+ language_wrapper.language_word_dict.get("fullscreen_checkbox_label")
56
+ )
57
+ self.fullscreen_checkbox.setChecked(True)
53
58
  # Show on all screen
54
59
  self.show_on_all_screen_checkbox = QCheckBox(
55
60
  language_wrapper.language_word_dict.get("Show on all screen")
@@ -65,6 +70,7 @@ class ImageSettingUI(QWidget):
65
70
  self.grid_layout.addWidget(self.opacity_slider, 0, 2)
66
71
  self.grid_layout.addWidget(self.choose_file_button, 1, 0)
67
72
  self.grid_layout.addWidget(self.ready_label, 1, 1)
73
+ self.grid_layout.addWidget(self.fullscreen_checkbox, 1, 2)
68
74
  self.grid_layout.addWidget(self.start_button, 2, 0)
69
75
  self.grid_layout.addWidget(self.show_on_all_screen_checkbox, 2, 1)
70
76
  self.grid_layout.addWidget(self.show_on_bottom_checkbox, 2, 2)
@@ -100,16 +106,13 @@ class ImageSettingUI(QWidget):
100
106
  select_monitor_index = int(combobox.currentText())
101
107
  if len(monitors) > select_monitor_index:
102
108
  monitor = monitors[select_monitor_index]
103
- gif_widget = self._create_image_widget()
104
- gif_widget.setScreen(monitor)
105
- gif_widget.move(monitor.availableGeometry().topLeft())
106
- gif_widget.showFullScreen()
109
+ image_widget = self._create_image_widget()
110
+ check_show_fullscreen(image_widget, self.fullscreen_checkbox, monitor)
111
+
107
112
  else:
108
113
  for monitor in monitors:
109
114
  image_widget = self._create_image_widget()
110
- image_widget.setScreen(monitor)
111
- image_widget.move(monitor.availableGeometry().topLeft())
112
- image_widget.showFullScreen()
115
+ check_show_fullscreen(image_widget, self.fullscreen_checkbox, monitor)
113
116
 
114
117
  def choose_and_copy_file_to_cwd_image_dir_then_play(self) -> None:
115
118
  self.ready_label.setText(
@@ -0,0 +1,175 @@
1
+ from PySide6.QtCore import Qt
2
+ from PySide6.QtGui import QGuiApplication, QPixmap
3
+ from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QPushButton, QMessageBox, \
4
+ QCheckBox, QDialog, QComboBox
5
+
6
+ from frontengine.show.particle.particle_ui import ParticleWidget
7
+ from frontengine.ui.dialog.choose_file_dialog import choose_image
8
+ from frontengine.ui.page.utils import monitor_choose_dialog
9
+ from frontengine.utils.logging.loggin_instance import front_engine_logger
10
+ from frontengine.utils.multi_language.language_wrapper import language_wrapper
11
+
12
+
13
+ class ParticleSettingUI(QWidget):
14
+
15
+ def __init__(self):
16
+ super().__init__()
17
+ self.grid_layout = QGridLayout()
18
+ self.grid_layout = QGridLayout(self)
19
+ self.grid_layout.setContentsMargins(0, 0, 0, 0)
20
+ self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
21
+ # Init variable
22
+ self.particle_list = []
23
+ self.show_all_screen = False
24
+ self.ready_to_play = False
25
+ # Opacity setting
26
+ self.opacity_slider = QSlider()
27
+ self.opacity_slider.setOrientation(Qt.Orientation.Horizontal)
28
+ self.opacity_label = QLabel(
29
+ language_wrapper.language_word_dict.get("Opacity")
30
+ )
31
+ self.opacity_slider.setMinimum(1)
32
+ self.opacity_slider.setMaximum(100)
33
+ self.opacity_slider.setValue(20)
34
+ self.opacity_slider.setTickInterval(1)
35
+ self.opacity_slider_value_label = QLabel(str(self.opacity_slider.value()))
36
+ self.opacity_slider.actionTriggered.connect(self.opacity_trick)
37
+ self.setLayout(self.grid_layout)
38
+ # Choose file button
39
+ self.choose_file_button = QPushButton(
40
+ language_wrapper.language_word_dict.get("image_setting_choose_file")
41
+ )
42
+ self.choose_file_button.clicked.connect(self.choose_and_copy_file_to_cwd_image_dir_then_play)
43
+ # Ready label and variable
44
+ self.ready_label = QLabel(
45
+ language_wrapper.language_word_dict.get("Not Ready")
46
+ )
47
+ self.image_path: [str, None] = None
48
+ # Choose direction
49
+ self.choose_direction_label = QLabel(language_wrapper.language_word_dict.get("choose_particle_direction"))
50
+ self.choose_direction_combobox = QComboBox()
51
+ self.choose_direction_combobox.addItems(
52
+ ["down", "up", "left", "right", "left_down", "left_up", "right_down", "right_up",
53
+ "random_minus", "random_add", "random"])
54
+ # Particle size
55
+ self.particle_size_label = QLabel(language_wrapper.language_word_dict.get("particle_size"))
56
+ self.particle_size_combobox = QComboBox()
57
+ for size in range(10, 310, 10):
58
+ self.particle_size_combobox.addItem(str(size))
59
+ self.particle_size_combobox.setCurrentText("50")
60
+ # Particle count
61
+ self.particle_count_label = QLabel(language_wrapper.language_word_dict.get("particle_count"))
62
+ self.particle_count_combobox = QComboBox()
63
+ for count in range(50, 10010, 10):
64
+ self.particle_count_combobox.addItem(str(count))
65
+ self.particle_count_combobox.setCurrentText("100")
66
+ # Particle count
67
+ self.particle_speed_label = QLabel(language_wrapper.language_word_dict.get("particle_speed"))
68
+ self.particle_speed_combobox = QComboBox()
69
+ for speed in range(1, 11, 1):
70
+ self.particle_speed_combobox.addItem(str(speed))
71
+ # Start button
72
+ self.start_button = QPushButton(
73
+ language_wrapper.language_word_dict.get("particle_setting_ui_play")
74
+ )
75
+ self.start_button.clicked.connect(self.start_play_particle)
76
+ # Show on all screen
77
+ self.show_on_all_screen_checkbox = QCheckBox(
78
+ language_wrapper.language_word_dict.get("Show on all screen")
79
+ )
80
+ self.show_on_all_screen_checkbox.clicked.connect(self.set_show_all_screen)
81
+ # Show on bottom
82
+ self.show_on_bottom_checkbox = QCheckBox(
83
+ language_wrapper.language_word_dict.get("Show on bottom")
84
+ )
85
+ # Add to layout
86
+ self.grid_layout.addWidget(self.opacity_label, 0, 0)
87
+ self.grid_layout.addWidget(self.opacity_slider_value_label, 0, 1)
88
+ self.grid_layout.addWidget(self.opacity_slider, 0, 2)
89
+ self.grid_layout.addWidget(self.choose_file_button, 1, 0)
90
+ self.grid_layout.addWidget(self.ready_label, 1, 1)
91
+ self.grid_layout.addWidget(self.choose_direction_label, 2, 0)
92
+ self.grid_layout.addWidget(self.choose_direction_combobox, 2, 1)
93
+ self.grid_layout.addWidget(self.particle_size_label, 3, 0)
94
+ self.grid_layout.addWidget(self.particle_size_combobox, 3, 1)
95
+ self.grid_layout.addWidget(self.particle_count_label, 4, 0)
96
+ self.grid_layout.addWidget(self.particle_count_combobox, 4, 1)
97
+ self.grid_layout.addWidget(self.particle_speed_label, 5, 0)
98
+ self.grid_layout.addWidget(self.particle_speed_combobox, 5, 1)
99
+ self.grid_layout.addWidget(self.start_button, 6, 0)
100
+ self.grid_layout.addWidget(self.show_on_all_screen_checkbox, 6, 1)
101
+ self.grid_layout.addWidget(self.show_on_bottom_checkbox, 6, 2)
102
+ self.setLayout(self.grid_layout)
103
+
104
+ def set_show_all_screen(self) -> None:
105
+ self.show_all_screen = self.show_on_all_screen_checkbox.isChecked()
106
+
107
+ def _create_particle_widget(self, screen_width: int = 1920, screen_height: int = 1080) -> ParticleWidget:
108
+ particle_widget = ParticleWidget(
109
+ pixmap=QPixmap(self.image_path),
110
+ particle_size=int(self.particle_size_combobox.currentText()),
111
+ particle_direction=self.choose_direction_combobox.currentText(),
112
+ particle_count=int(self.particle_count_combobox.currentText()),
113
+ opacity=float(self.opacity_slider.value()) / 100,
114
+ screen_width=screen_width,
115
+ screen_height=screen_height,
116
+ particle_speed=int(self.particle_speed_combobox.currentText())
117
+ )
118
+ particle_widget.set_ui_window_flag(self.show_on_bottom_checkbox.isChecked())
119
+ self.particle_list.append(particle_widget)
120
+ return particle_widget
121
+
122
+ def start_play_particle(self) -> None:
123
+ if self.image_path is None or self.ready_to_play is False:
124
+ message_box = QMessageBox(self)
125
+ message_box.setText(
126
+ language_wrapper.language_word_dict.get("not_prepare")
127
+ )
128
+ message_box.show()
129
+ else:
130
+ front_engine_logger.info("start play particle")
131
+ monitors = QGuiApplication.screens()
132
+ if self.show_all_screen is False and len(monitors) <= 1:
133
+ particle_widget = self._create_particle_widget(
134
+ monitors[0].availableGeometry().width(),
135
+ monitors[0].availableGeometry().height()
136
+ )
137
+ particle_widget.showFullScreen()
138
+ elif self.show_all_screen is False and len(monitors) >= 2:
139
+ input_dialog, combobox = monitor_choose_dialog(self, monitors)
140
+ result = input_dialog.exec_()
141
+ if result == QDialog.DialogCode.Accepted:
142
+ select_monitor_index = int(combobox.currentText())
143
+ if len(monitors) > select_monitor_index:
144
+ monitor = monitors[select_monitor_index]
145
+ particle_widget = self._create_particle_widget(
146
+ monitor.availableGeometry().width(),
147
+ monitor.availableGeometry().height()
148
+ )
149
+ particle_widget.setScreen(monitor)
150
+ particle_widget.move(monitor.availableGeometry().topLeft())
151
+ particle_widget.showFullScreen()
152
+ else:
153
+ for monitor in monitors:
154
+ particle_widget = self._create_particle_widget(
155
+ monitor.availableGeometry().width(),
156
+ monitor.availableGeometry().height()
157
+ )
158
+ particle_widget.setScreen(monitor)
159
+ particle_widget.move(monitor.availableGeometry().topLeft())
160
+ particle_widget.showFullScreen()
161
+
162
+ def choose_and_copy_file_to_cwd_image_dir_then_play(self) -> None:
163
+ self.ready_label.setText(
164
+ language_wrapper.language_word_dict.get("Not Ready")
165
+ )
166
+ self.ready_to_play = False
167
+ self.image_path = choose_image(self)
168
+ if self.image_path is not None:
169
+ self.ready_label.setText(
170
+ language_wrapper.language_word_dict.get("Ready")
171
+ )
172
+ self.ready_to_play = True
173
+
174
+ def opacity_trick(self) -> None:
175
+ self.opacity_slider_value_label.setText(str(self.opacity_slider.value()))
@@ -1,4 +1,5 @@
1
- from PySide6.QtWidgets import QWidget, QDialog, QGridLayout, QLabel, QComboBox, QPushButton
1
+ from PySide6.QtGui import QScreen
2
+ from PySide6.QtWidgets import QWidget, QDialog, QGridLayout, QLabel, QComboBox, QPushButton, QCheckBox
2
3
 
3
4
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
4
5
 
@@ -21,3 +22,15 @@ def monitor_choose_dialog(parent: QWidget, monitors: list):
21
22
  grid_layout.addWidget(no_button, 2, 1)
22
23
  input_dialog.setLayout(grid_layout)
23
24
  return input_dialog, combobox
25
+
26
+
27
+ def check_show_fullscreen(widget: QWidget, fullscreen_checkbox: QCheckBox, monitor: QScreen):
28
+ if fullscreen_checkbox.isChecked():
29
+ widget.setScreen(monitor)
30
+ widget.move(monitor.availableGeometry().topLeft())
31
+ widget.showFullScreen()
32
+ else:
33
+ widget.setScreen(monitor)
34
+ center = monitor.availableGeometry().center()
35
+ widget.move(center - widget.rect().center())
36
+ widget.show()