frontengine 0.0.65__tar.gz → 0.0.67__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-0.0.65 → frontengine-0.0.67}/PKG-INFO +1 -1
  2. frontengine-0.0.67/frontengine/show/clicker/clicker_scene.py +7 -0
  3. frontengine-0.0.67/frontengine/show/clicker/clicker_ui.py +30 -0
  4. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/show/particle/particle_scene.py +18 -12
  5. frontengine-0.0.67/frontengine/show/particle/particle_utils.py +61 -0
  6. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/show/video/video_player.py +1 -0
  7. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/main_ui.py +3 -19
  8. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/gif/gif_setting_ui.py +9 -7
  9. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/image/image_setting_ui.py +11 -8
  10. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/particle/particle_setting_ui.py +2 -2
  11. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/utils.py +14 -1
  12. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/video/video_setting_ui.py +9 -7
  13. frontengine-0.0.67/frontengine/utils/multi_language/__init__.py +0 -0
  14. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/multi_language/english.py +1 -0
  15. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/multi_language/france.py +8 -0
  16. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/multi_language/germany.py +8 -0
  17. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/multi_language/italy.py +8 -0
  18. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/multi_language/russian.py +8 -0
  19. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/multi_language/simplified_chinese.py +8 -0
  20. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/multi_language/traditional_chinese.py +8 -0
  21. frontengine-0.0.67/frontengine/utils/redirect_manager/__init__.py +0 -0
  22. frontengine-0.0.67/frontengine/worker/__init__.py +0 -0
  23. frontengine-0.0.67/frontengine/worker/qthread_worker.py +34 -0
  24. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine.egg-info/PKG-INFO +1 -1
  25. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine.egg-info/SOURCES.txt +8 -2
  26. {frontengine-0.0.65 → frontengine-0.0.67}/pyproject.toml +1 -1
  27. frontengine-0.0.65/frontengine/show/particle/particle_utils.py +0 -75
  28. {frontengine-0.0.65 → frontengine-0.0.67}/LICENSE +0 -0
  29. {frontengine-0.0.65 → frontengine-0.0.67}/README.md +0 -0
  30. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/__init__.py +0 -0
  31. {frontengine-0.0.65/frontengine/show → frontengine-0.0.67/frontengine/gl_widget}/__init__.py +0 -0
  32. {frontengine-0.0.65/frontengine/show/gif → frontengine-0.0.67/frontengine/show}/__init__.py +0 -0
  33. {frontengine-0.0.65/frontengine/show/image → frontengine-0.0.67/frontengine/show/clicker}/__init__.py +0 -0
  34. {frontengine-0.0.65/frontengine/show/load → frontengine-0.0.67/frontengine/show/gif}/__init__.py +0 -0
  35. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/show/gif/paint_gif.py +0 -0
  36. {frontengine-0.0.65/frontengine/show/particle → frontengine-0.0.67/frontengine/show/image}/__init__.py +0 -0
  37. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/show/image/paint_image.py +0 -0
  38. {frontengine-0.0.65/frontengine/show/scene → frontengine-0.0.67/frontengine/show/load}/__init__.py +0 -0
  39. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/show/load/load_someone_make_ui.py +0 -0
  40. {frontengine-0.0.65/frontengine/show/sound_player → frontengine-0.0.67/frontengine/show/particle}/__init__.py +0 -0
  41. /frontengine-0.0.65/frontengine/show/particle/paint_particle.py → /frontengine-0.0.67/frontengine/show/particle/particle_ui.py +0 -0
  42. {frontengine-0.0.65/frontengine/show/text → frontengine-0.0.67/frontengine/show/scene}/__init__.py +0 -0
  43. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/show/scene/extend_graphic_scene.py +0 -0
  44. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/show/scene/extend_graphic_view.py +0 -0
  45. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/show/scene/scene.py +0 -0
  46. {frontengine-0.0.65/frontengine/show/video → frontengine-0.0.67/frontengine/show/sound_player}/__init__.py +0 -0
  47. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/show/sound_player/sound_effect.py +0 -0
  48. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/show/sound_player/sound_player.py +0 -0
  49. {frontengine-0.0.65/frontengine/show/web → frontengine-0.0.67/frontengine/show/text}/__init__.py +0 -0
  50. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/show/text/draw_text.py +0 -0
  51. {frontengine-0.0.65/frontengine/system_tray → frontengine-0.0.67/frontengine/show/video}/__init__.py +0 -0
  52. {frontengine-0.0.65/frontengine/ui → frontengine-0.0.67/frontengine/show/web}/__init__.py +0 -0
  53. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/show/web/webview.py +0 -0
  54. {frontengine-0.0.65/frontengine/ui/color → frontengine-0.0.67/frontengine/system_tray}/__init__.py +0 -0
  55. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/system_tray/extend_system_tray.py +0 -0
  56. {frontengine-0.0.65/frontengine/ui/dialog → frontengine-0.0.67/frontengine/ui}/__init__.py +0 -0
  57. {frontengine-0.0.65/frontengine/ui/menu → frontengine-0.0.67/frontengine/ui/color}/__init__.py +0 -0
  58. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/color/global_color.py +0 -0
  59. {frontengine-0.0.65/frontengine/ui/page → frontengine-0.0.67/frontengine/ui/dialog}/__init__.py +0 -0
  60. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/dialog/choose_file_dialog.py +0 -0
  61. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/dialog/save_file_dialog.py +0 -0
  62. {frontengine-0.0.65/frontengine/ui/page/control_center → frontengine-0.0.67/frontengine/ui/menu}/__init__.py +0 -0
  63. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/menu/help_menu.py +0 -0
  64. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/menu/how_to_menu.py +0 -0
  65. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/menu/language_menu.py +0 -0
  66. {frontengine-0.0.65/frontengine/ui/page/gif → frontengine-0.0.67/frontengine/ui/page}/__init__.py +0 -0
  67. {frontengine-0.0.65/frontengine/ui/page/image → frontengine-0.0.67/frontengine/ui/page/control_center}/__init__.py +0 -0
  68. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/control_center/control_center_ui.py +0 -0
  69. {frontengine-0.0.65/frontengine/ui/page/particle → frontengine-0.0.67/frontengine/ui/page/gif}/__init__.py +0 -0
  70. {frontengine-0.0.65/frontengine/ui/page/scene_setting → frontengine-0.0.67/frontengine/ui/page/image}/__init__.py +0 -0
  71. {frontengine-0.0.65/frontengine/ui/page/scene_setting/scene_page → frontengine-0.0.67/frontengine/ui/page/particle}/__init__.py +0 -0
  72. {frontengine-0.0.65/frontengine/ui/page/sound_player → frontengine-0.0.67/frontengine/ui/page/scene_setting}/__init__.py +0 -0
  73. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/scene_setting/scene_manager.py +0 -0
  74. {frontengine-0.0.65/frontengine/ui/page/text → frontengine-0.0.67/frontengine/ui/page/scene_setting/scene_page}/__init__.py +0 -0
  75. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/scene_setting/scene_page/gif.py +0 -0
  76. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/scene_setting/scene_page/image.py +0 -0
  77. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/scene_setting/scene_page/sound.py +0 -0
  78. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/scene_setting/scene_page/text.py +0 -0
  79. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/scene_setting/scene_page/video.py +0 -0
  80. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/scene_setting/scene_page/web.py +0 -0
  81. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/scene_setting/scene_setting_ui.py +0 -0
  82. {frontengine-0.0.65/frontengine/ui/page/video → frontengine-0.0.67/frontengine/ui/page/sound_player}/__init__.py +0 -0
  83. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/sound_player/sound_player_setting_ui.py +0 -0
  84. {frontengine-0.0.65/frontengine/ui/page/web → frontengine-0.0.67/frontengine/ui/page/text}/__init__.py +0 -0
  85. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/text/text_setting_ui.py +0 -0
  86. {frontengine-0.0.65/frontengine/user_setting → frontengine-0.0.67/frontengine/ui/page/video}/__init__.py +0 -0
  87. {frontengine-0.0.65/frontengine/utils → frontengine-0.0.67/frontengine/ui/page/web}/__init__.py +0 -0
  88. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/ui/page/web/web_setting_ui.py +0 -0
  89. {frontengine-0.0.65/frontengine/utils/browser → frontengine-0.0.67/frontengine/user_setting}/__init__.py +0 -0
  90. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/user_setting/scene_setting.py +0 -0
  91. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/user_setting/user_setting_file.py +0 -0
  92. {frontengine-0.0.65/frontengine/utils/critical_exit → frontengine-0.0.67/frontengine/utils}/__init__.py +0 -0
  93. {frontengine-0.0.65/frontengine/utils/file → frontengine-0.0.67/frontengine/utils/browser}/__init__.py +0 -0
  94. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/browser/browser.py +0 -0
  95. {frontengine-0.0.65/frontengine/utils/json → frontengine-0.0.67/frontengine/utils/critical_exit}/__init__.py +0 -0
  96. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/critical_exit/check_key_is_press.py +0 -0
  97. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/critical_exit/critical_exit.py +0 -0
  98. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/critical_exit/win32_vk.py +0 -0
  99. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/exception/__init__.py +0 -0
  100. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/exception/exception_tags.py +0 -0
  101. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/exception/exceptions.py +0 -0
  102. {frontengine-0.0.65/frontengine/utils/logging → frontengine-0.0.67/frontengine/utils/file}/__init__.py +0 -0
  103. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/file/open/__init__.py +0 -0
  104. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/file/open/open_file.py +0 -0
  105. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/file/save/__init__.py +0 -0
  106. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/file/save/save_file.py +0 -0
  107. {frontengine-0.0.65/frontengine/utils/multi_language → frontengine-0.0.67/frontengine/utils/json}/__init__.py +0 -0
  108. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/json/json_file.py +0 -0
  109. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/json_format/__init__.py +0 -0
  110. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/json_format/json_process.py +0 -0
  111. {frontengine-0.0.65/frontengine/utils/redirect_manager → frontengine-0.0.67/frontengine/utils/logging}/__init__.py +0 -0
  112. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/logging/loggin_instance.py +0 -0
  113. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/multi_language/language_wrapper.py +0 -0
  114. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine/utils/redirect_manager/redirect_manager_class.py +0 -0
  115. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine.egg-info/dependency_links.txt +0 -0
  116. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine.egg-info/requires.txt +0 -0
  117. {frontengine-0.0.65 → frontengine-0.0.67}/frontengine.egg-info/top_level.txt +0 -0
  118. {frontengine-0.0.65 → frontengine-0.0.67}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: frontengine
3
- Version: 0.0.65
3
+ Version: 0.0.67
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,3 +1,4 @@
1
+ import random
1
2
  from typing import Callable
2
3
 
3
4
  from PySide6.QtCore import QTimer, QPoint, QRect
@@ -5,7 +6,7 @@ from PySide6.QtGui import QPixmap
5
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()
@@ -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
@@ -29,7 +29,7 @@ from frontengine.utils.multi_language.language_wrapper import language_wrapper
29
29
  FrontEngine_EXTEND_TAB: Dict[str, Type[QWidget]] = {}
30
30
 
31
31
 
32
- class FrontEngineMainUI(QMainWindow, QtStyleTools):
32
+ class FrontEngineMainUI(QMainWindow):
33
33
 
34
34
  def __init__(self, debug: bool = False, show_system_tray_ray: bool = True):
35
35
  super().__init__()
@@ -69,7 +69,6 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
69
69
  )
70
70
  # Style menu bar
71
71
  self.menu_bar = QMenuBar()
72
- self.add_style_menu()
73
72
  self.setMenuBar(self.menu_bar)
74
73
  self.tab_widget.addTab(
75
74
  self.video_setting_ui, language_wrapper.language_word_dict.get("tab_video_text"))
@@ -131,22 +130,7 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
131
130
  apply_stylesheet(self, theme=user_setting_dict.get("theme"))
132
131
  self.showMaximized()
133
132
 
134
- def add_style_menu(self) -> None:
135
- self.menu_bar.style_menu = self.menu_bar.addMenu(
136
- language_wrapper.language_word_dict.get("menu_bar_ui_style")
137
- )
138
- for style in [
139
- 'dark_amber.xml', 'dark_blue.xml', 'dark_cyan.xml', 'dark_lightgreen.xml', 'dark_pink.xml',
140
- 'dark_purple.xml', 'dark_red.xml', 'dark_teal.xml', 'dark_yellow.xml', 'light_amber.xml',
141
- 'light_blue.xml', 'light_cyan.xml', 'light_cyan_500.xml', 'light_lightgreen.xml',
142
- 'light_pink.xml', 'light_purple.xml', 'light_red.xml', 'light_teal.xml', 'light_yellow.xml'
143
- ]:
144
- change_style_action = QAction(style, parent=self)
145
- change_style_action.triggered.connect(self.set_style)
146
- self.menu_bar.style_menu.addAction(change_style_action)
147
-
148
133
  def set_style(self) -> None:
149
- self.apply_stylesheet(self, self.sender().text())
150
134
  user_setting_dict.update({"theme": self.sender().text()})
151
135
 
152
136
  def closeEvent(self, event) -> 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)
@@ -101,15 +107,12 @@ class ImageSettingUI(QWidget):
101
107
  if len(monitors) > select_monitor_index:
102
108
  monitor = monitors[select_monitor_index]
103
109
  image_widget = self._create_image_widget()
104
- image_widget.setScreen(monitor)
105
- image_widget.move(monitor.availableGeometry().topLeft())
106
- image_widget.showFullScreen()
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(
@@ -3,7 +3,7 @@ from PySide6.QtGui import QGuiApplication, QPixmap
3
3
  from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QPushButton, QMessageBox, \
4
4
  QCheckBox, QDialog, QComboBox
5
5
 
6
- from frontengine.show.particle.paint_particle import ParticleWidget
6
+ from frontengine.show.particle.particle_ui import ParticleWidget
7
7
  from frontengine.ui.dialog.choose_file_dialog import choose_image
8
8
  from frontengine.ui.page.utils import monitor_choose_dialog
9
9
  from frontengine.utils.logging.loggin_instance import front_engine_logger
@@ -60,7 +60,7 @@ class ParticleSettingUI(QWidget):
60
60
  # Particle count
61
61
  self.particle_count_label = QLabel(language_wrapper.language_word_dict.get("particle_count"))
62
62
  self.particle_count_combobox = QComboBox()
63
- for count in range(50, 1010, 10):
63
+ for count in range(50, 10010, 10):
64
64
  self.particle_count_combobox.addItem(str(count))
65
65
  self.particle_count_combobox.setCurrentText("100")
66
66
  # Particle count
@@ -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()
@@ -4,7 +4,7 @@ from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QPushButton
4
4
 
5
5
  from frontengine.show.video.video_player import VideoWidget
6
6
  from frontengine.ui.dialog.choose_file_dialog import choose_video
7
- from frontengine.ui.page.utils import monitor_choose_dialog
7
+ from frontengine.ui.page.utils import monitor_choose_dialog, check_show_fullscreen
8
8
  from frontengine.utils.logging.loggin_instance import front_engine_logger
9
9
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
10
10
 
@@ -70,6 +70,11 @@ class VideoSettingUI(QWidget):
70
70
  language_wrapper.language_word_dict.get("video_setting_start_play")
71
71
  )
72
72
  self.start_button.clicked.connect(self.start_play_gif)
73
+ # Expand
74
+ self.fullscreen_checkbox = QCheckBox(
75
+ language_wrapper.language_word_dict.get("fullscreen_checkbox_label")
76
+ )
77
+ self.fullscreen_checkbox.setChecked(True)
73
78
  # Show on all screen
74
79
  self.show_on_all_screen_checkbox = QCheckBox(
75
80
  language_wrapper.language_word_dict.get("Show on all screen")
@@ -92,6 +97,7 @@ class VideoSettingUI(QWidget):
92
97
  self.grid_layout.addWidget(self.choose_file_button, 3, 0)
93
98
  self.grid_layout.addWidget(self.show_on_all_screen_checkbox, 4, 0)
94
99
  self.grid_layout.addWidget(self.show_on_bottom_checkbox, 4, 1)
100
+ self.grid_layout.addWidget(self.fullscreen_checkbox, 4, 2)
95
101
  self.grid_layout.addWidget(self.start_button, 5, 0)
96
102
  self.grid_layout.addWidget(self.ready_label, 5, 1)
97
103
  self.setLayout(self.grid_layout)
@@ -131,18 +137,14 @@ class VideoSettingUI(QWidget):
131
137
  if len(monitors) > select_monitor_index:
132
138
  monitor = monitors[select_monitor_index]
133
139
  video_widget = self._create_video_widget()
134
- video_widget.setScreen(monitor)
135
- video_widget.move(monitor.availableGeometry().topLeft())
136
- video_widget.showFullScreen()
140
+ check_show_fullscreen(video_widget, self.fullscreen_checkbox, monitor)
137
141
  else:
138
142
  count = 0
139
143
  for monitor in monitors:
140
144
  video_widget = self._create_video_widget()
141
145
  if count >= 1:
142
146
  video_widget.media_player.audioOutput().setVolume(0)
143
- video_widget.setScreen(monitor)
144
- video_widget.move(monitor.availableGeometry().topLeft())
145
- video_widget.showFullScreen()
147
+ check_show_fullscreen(video_widget, self.fullscreen_checkbox, monitor)
146
148
  count = count + 1
147
149
 
148
150
  def choose_and_copy_file_to_cwd_gif_dir_then_play(self) -> None:
@@ -62,6 +62,7 @@ english_word_dict = {
62
62
  "show_on_which_monitor": "Show on which monitor",
63
63
  "ok": "ok",
64
64
  "no": "no",
65
+ "fullscreen_checkbox_label": "Fullscreen?",
65
66
  # GIF setting ui
66
67
  "gif_setting_ui_choose_file": "Choose GIF or WEBP file",
67
68
  "gif_setting_ui_play": "Start Play GIF or WEBP",
@@ -62,6 +62,7 @@ french_word_dict = {
62
62
  "show_on_which_monitor": "Afficher sur quel écran",
63
63
  "ok": "OK",
64
64
  "no": "Non",
65
+ "fullscreen_checkbox_label": "Plein écran?",
65
66
  # GIF setting ui
66
67
  "gif_setting_ui_choose_file": "Choisir un fichier GIF ou WEBP",
67
68
  "gif_setting_ui_play": "Lancer la lecture du GIF ou WEBP",
@@ -109,6 +110,13 @@ french_word_dict = {
109
110
  "scene_input": "Charger le fichier de scène",
110
111
  "scene_script_clear": "Effacer tous les scripts",
111
112
  "scene_script": "Script de scène",
113
+ # Particle ui
114
+ "tab_particle_text": "Particule",
115
+ "choose_particle_direction": "Choisissez la direction des particules",
116
+ "particle_setting_ui_play": "Démarrer la lecture des particules",
117
+ "particle_size": "Taille des particules",
118
+ "particle_count": "Nombre de particules",
119
+ "particle_speed": "Vitesse des particules",
112
120
  # Chat scene input
113
121
  "chat_scene_input_title": "Entrer le contenu de la discussion",
114
122
  "chat_scene_send_chat": "Envoyer le texte",
@@ -62,6 +62,7 @@ germany_word_dict = {
62
62
  "show_on_which_monitor": "Auf welchem Monitor anzeigen",
63
63
  "ok": "OK",
64
64
  "no": "Nein",
65
+ "fullscreen_checkbox_label": "Vollbild?",
65
66
  # GIF-Einstellungs-UI
66
67
  "gif_setting_ui_choose_file": "GIF- oder WEBP-Datei auswählen",
67
68
  "gif_setting_ui_play": "GIF oder WEBP abspielen",
@@ -109,6 +110,13 @@ germany_word_dict = {
109
110
  "scene_input": "Szenendatei laden",
110
111
  "scene_script_clear": "Alle Skripte löschen",
111
112
  "scene_script": "Szenen-Skript",
113
+ # Particle ui
114
+ "tab_particle_text": "Partikel",
115
+ "choose_particle_direction": "Partikelrichtung auswählen",
116
+ "particle_setting_ui_play": "Partikelwiedergabe starten",
117
+ "particle_size": "Partikelgröße",
118
+ "particle_count": "Partikelanzahl",
119
+ "particle_speed": "Partikelgeschwindigkeit",
112
120
  # Chat-Szenen-Eingabe
113
121
  "chat_scene_input_title": "Chat-Inhalt eingeben",
114
122
  "chat_scene_send_chat": "Text senden",
@@ -62,6 +62,7 @@ italian_word_dict = {
62
62
  "show_on_which_monitor": "Mostra su quale schermo",
63
63
  "ok": "OK",
64
64
  "no": "No",
65
+ "fullscreen_checkbox_label": "Schermo intero?",
65
66
  # GIF setting ui
66
67
  "gif_setting_ui_choose_file": "Scegli un file GIF o WEBP",
67
68
  "gif_setting_ui_play": "Avvia la riproduzione di GIF o WEBP",
@@ -109,6 +110,13 @@ italian_word_dict = {
109
110
  "scene_input": "Carica il file di scena",
110
111
  "scene_script_clear": "Cancella tutti gli script",
111
112
  "scene_script": "Script della scena",
113
+ # Particle ui
114
+ "tab_particle_text": "Particella",
115
+ "choose_particle_direction": "Scegli la direzione delle particelle",
116
+ "particle_setting_ui_play": "Avvia la riproduzione delle particelle",
117
+ "particle_size": "Dimensione delle particelle",
118
+ "particle_count": "Numero di particelle",
119
+ "particle_speed": "Velocità delle particelle",
112
120
  # Chat scene input
113
121
  "chat_scene_input_title": "Inserisci il contenuto della chat",
114
122
  "chat_scene_send_chat": "Invia il testo",
@@ -62,6 +62,7 @@ russian_word_dict = {
62
62
  "show_on_which_monitor": "На каком мониторе показать",
63
63
  "ok": "ОК",
64
64
  "no": "Нет",
65
+ "fullscreen_checkbox_label": "Полноэкранный режим?",
65
66
  # GIF setting ui
66
67
  "gif_setting_ui_choose_file": "Выберите файл GIF или WEBP",
67
68
  "gif_setting_ui_play": "Начать воспроизведение GIF или WEBP",
@@ -109,6 +110,13 @@ russian_word_dict = {
109
110
  "scene_input": "Входной файл сцены",
110
111
  "scene_script_clear": "Очистить все скрипты",
111
112
  "scene_script": "Сценарий сцены",
113
+ # Particle ui
114
+ "tab_particle_text": "Частица",
115
+ "choose_particle_direction": "Выберите направление частицы",
116
+ "particle_setting_ui_play": "Начать воспроизведение частиц",
117
+ "particle_size": "Размер частицы",
118
+ "particle_count": "Количество частиц",
119
+ "particle_speed": "Скорость частицы",
112
120
  # Chat scene input
113
121
  "chat_scene_input_title": "Введите содержание чата",
114
122
  "chat_scene_send_chat": "Отправить текст",
@@ -62,6 +62,7 @@ simplified_chinese_word_dict = {
62
62
  "show_on_which_monitor": "显示在哪个屏幕",
63
63
  "ok": "确定",
64
64
  "no": "否",
65
+ "fullscreen_checkbox_label": "全屏?",
65
66
  # GIF 设置 UI
66
67
  "gif_setting_ui_choose_file": "选择 GIF 或 WEBP 文件",
67
68
  "gif_setting_ui_play": "开始播放 GIF 或 WEBP",
@@ -109,6 +110,13 @@ simplified_chinese_word_dict = {
109
110
  "scene_input": "读取场景文件",
110
111
  "scene_script_clear": "清除所有脚本",
111
112
  "scene_script": "场景脚本",
113
+ # Particle ui
114
+ "tab_particle_text": "粒子",
115
+ "choose_particle_direction": "选择粒子方向",
116
+ "particle_setting_ui_play": "开始播放粒子",
117
+ "particle_size": "粒子大小",
118
+ "particle_count": "粒子数量",
119
+ "particle_speed": "粒子速度",
112
120
  # Chat scene input
113
121
  "chat_scene_input_title": "输入聊天内容",
114
122
  "chat_scene_send_chat": "送出文字",
@@ -62,6 +62,7 @@ traditional_chinese_word_dict = {
62
62
  "show_on_which_monitor": "顯示在哪個螢幕",
63
63
  "ok": "確定",
64
64
  "no": "否",
65
+ "fullscreen_checkbox_label": "全螢幕?",
65
66
  # GIF setting ui
66
67
  "gif_setting_ui_choose_file": "選擇 GIF 或 WEBP 檔案",
67
68
  "gif_setting_ui_play": "開始撥放 GIF 或 WEBP",
@@ -109,6 +110,13 @@ traditional_chinese_word_dict = {
109
110
  "scene_input": "讀取場景檔案",
110
111
  "scene_script_clear": "清除所有腳本",
111
112
  "scene_script": "場景腳本",
113
+ # Particle ui
114
+ "tab_particle_text": "粒子",
115
+ "choose_particle_direction": "選擇粒子方向",
116
+ "particle_setting_ui_play": "開始播放粒子",
117
+ "particle_size": "粒子大小",
118
+ "particle_count": "粒子數量",
119
+ "particle_speed": "粒子速度",
112
120
  # Chat scene input
113
121
  "chat_scene_input_title": "輸入聊天內容",
114
122
  "chat_scene_send_chat": "送出文字",
File without changes
@@ -0,0 +1,34 @@
1
+ import traceback
2
+ from typing import Callable
3
+
4
+ from PySide6 import QtCore
5
+ from PySide6.QtCore import Signal, QRunnable, Slot
6
+
7
+
8
+ class QThreadSignal(QtCore.QObject):
9
+ finished = Signal()
10
+ error = Signal(tuple)
11
+ result = Signal(object)
12
+ progress = Signal(int)
13
+
14
+
15
+ class QThreadWorker(QRunnable):
16
+
17
+ def __init__(self, function: Callable, *args, **kwargs):
18
+ super().__init__()
19
+ self.function = function
20
+ self.args = args
21
+ self.kwargs = kwargs
22
+ self.signal = QThreadSignal()
23
+
24
+ @Slot()
25
+ def run(self):
26
+ try:
27
+ result = self.function(*self.args, **self.kwargs)
28
+ except Exception as e:
29
+ traceback.print_exc()
30
+ self.signal.error.emit(e)
31
+ else:
32
+ self.signal.result.emit(result)
33
+ finally:
34
+ self.signal.finished.emit()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: frontengine
3
- Version: 0.0.65
3
+ Version: 0.0.67
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
@@ -7,7 +7,11 @@ frontengine.egg-info/SOURCES.txt
7
7
  frontengine.egg-info/dependency_links.txt
8
8
  frontengine.egg-info/requires.txt
9
9
  frontengine.egg-info/top_level.txt
10
+ frontengine/gl_widget/__init__.py
10
11
  frontengine/show/__init__.py
12
+ frontengine/show/clicker/__init__.py
13
+ frontengine/show/clicker/clicker_scene.py
14
+ frontengine/show/clicker/clicker_ui.py
11
15
  frontengine/show/gif/__init__.py
12
16
  frontengine/show/gif/paint_gif.py
13
17
  frontengine/show/image/__init__.py
@@ -15,8 +19,8 @@ frontengine/show/image/paint_image.py
15
19
  frontengine/show/load/__init__.py
16
20
  frontengine/show/load/load_someone_make_ui.py
17
21
  frontengine/show/particle/__init__.py
18
- frontengine/show/particle/paint_particle.py
19
22
  frontengine/show/particle/particle_scene.py
23
+ frontengine/show/particle/particle_ui.py
20
24
  frontengine/show/particle/particle_utils.py
21
25
  frontengine/show/scene/__init__.py
22
26
  frontengine/show/scene/extend_graphic_scene.py
@@ -106,4 +110,6 @@ frontengine/utils/multi_language/russian.py
106
110
  frontengine/utils/multi_language/simplified_chinese.py
107
111
  frontengine/utils/multi_language/traditional_chinese.py
108
112
  frontengine/utils/redirect_manager/__init__.py
109
- frontengine/utils/redirect_manager/redirect_manager_class.py
113
+ frontengine/utils/redirect_manager/redirect_manager_class.py
114
+ frontengine/worker/__init__.py
115
+ frontengine/worker/qthread_worker.py
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "frontengine"
9
- version = "0.0.65"
9
+ version = "0.0.67"
10
10
  authors = [
11
11
  { name = "JE-Chen", email = "jechenmailman@gmail.com" },
12
12
  ]
@@ -1,75 +0,0 @@
1
- import random
2
- from typing import Dict, Callable
3
-
4
- from PySide6.QtGui import QPixmap
5
- from PySide6.QtWidgets import QGraphicsPixmapItem
6
-
7
-
8
- class Particle(object):
9
-
10
- def __init__(self, height: int, width: int, pixmap: QPixmap):
11
- self.pixmap: QPixmap = pixmap
12
- self.x: int = random.randint(0, width)
13
- self.y: int = random.randint(0, height)
14
- self.height = self.pixmap.height()
15
- self.width = self.pixmap.width()
16
- self.pixmap_item: [QGraphicsPixmapItem, None] = None
17
-
18
-
19
- def particle_down(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
20
- for particle in particle_dict.values():
21
- particle.y += random.randint(0, particle_speed)
22
-
23
-
24
- def particle_up(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
25
- for particle in particle_dict.values():
26
- particle.y -= random.randint(0, particle_speed)
27
-
28
-
29
- def particle_left(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
30
- for particle in particle_dict.values():
31
- particle.x -= random.randint(0, particle_speed)
32
-
33
-
34
- def particle_right(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
35
- for particle in particle_dict.values():
36
- particle.x += random.randint(0, particle_speed)
37
-
38
-
39
- def particle_left_down(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
40
- particle_left(particle_dict, particle_speed)
41
- particle_down(particle_dict, particle_speed)
42
-
43
-
44
- def particle_left_up(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
45
- particle_left(particle_dict, particle_speed)
46
- particle_up(particle_dict, particle_speed)
47
-
48
-
49
- def particle_right_down(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
50
- particle_right(particle_dict, particle_speed)
51
- particle_down(particle_dict, particle_speed)
52
-
53
-
54
- def particle_right_up(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
55
- particle_right(particle_dict, particle_speed)
56
- particle_up(particle_dict, particle_speed)
57
-
58
-
59
- def particle_random_minus(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
60
- for particle in particle_dict.values():
61
- particle.y += random.randint(0, particle_speed)
62
- particle.x -= random.randint(0, particle_speed)
63
-
64
-
65
- def particle_random_add(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
66
- for particle in particle_dict.values():
67
- particle.y -= random.randint(0, particle_speed)
68
- particle.x += random.randint(0, particle_speed)
69
-
70
-
71
- def particle_random(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
72
- function: Callable = random.choice(
73
- [particle_down, particle_up, particle_left, particle_right, particle_right_up, particle_left_down,
74
- particle_left_up, particle_right_down, particle_random_add, particle_random_minus])
75
- function(particle_dict, particle_speed)
File without changes
File without changes
File without changes