frontengine 0.0.56__tar.gz → 0.0.58__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 (126) hide show
  1. {frontengine-0.0.56 → frontengine-0.0.58}/PKG-INFO +1 -1
  2. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/__init__.py +1 -2
  3. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/scene/extend_graphic_scene.py +0 -1
  4. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/scene/extend_graphic_view.py +2 -1
  5. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/scene/scene.py +23 -41
  6. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/text/draw_text.py +28 -3
  7. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/video/video_player.py +2 -3
  8. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/web/webview.py +10 -1
  9. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/dialog/choose_file_dialog.py +0 -9
  10. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/main_ui.py +2 -0
  11. frontengine-0.0.58/frontengine/ui/menu/how_to_menu.py +25 -0
  12. frontengine-0.0.58/frontengine/ui/menu/language_menu.py +88 -0
  13. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/control_center/control_center_ui.py +2 -6
  14. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/gif/gif_setting_ui.py +16 -4
  15. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/image/image_setting_ui.py +15 -3
  16. frontengine-0.0.58/frontengine/ui/page/scene_setting/scene_manager.py +96 -0
  17. frontengine-0.0.58/frontengine/ui/page/scene_setting/scene_page/gif.py +102 -0
  18. frontengine-0.0.58/frontengine/ui/page/scene_setting/scene_page/image.py +83 -0
  19. frontengine-0.0.58/frontengine/ui/page/scene_setting/scene_page/sound.py +84 -0
  20. frontengine-0.0.58/frontengine/ui/page/scene_setting/scene_page/text.py +93 -0
  21. frontengine-0.0.58/frontengine/ui/page/scene_setting/scene_page/video.py +122 -0
  22. frontengine-0.0.58/frontengine/ui/page/scene_setting/scene_page/web.py +66 -0
  23. frontengine-0.0.58/frontengine/ui/page/scene_setting/scene_setting_ui.py +55 -0
  24. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/sound_player/sound_player_setting_ui.py +0 -1
  25. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/text/text_setting_ui.py +35 -7
  26. frontengine-0.0.58/frontengine/ui/page/utils.py +23 -0
  27. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/video/video_setting_ui.py +18 -7
  28. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/web/web_setting_ui.py +19 -5
  29. frontengine-0.0.58/frontengine/user_setting/scene_setting.py +34 -0
  30. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/multi_language/english.py +15 -3
  31. frontengine-0.0.58/frontengine/utils/multi_language/france.py +137 -0
  32. frontengine-0.0.58/frontengine/utils/multi_language/germany.py +137 -0
  33. frontengine-0.0.58/frontengine/utils/multi_language/italy.py +137 -0
  34. frontengine-0.0.58/frontengine/utils/multi_language/language_wrapper.py +41 -0
  35. frontengine-0.0.58/frontengine/utils/multi_language/russian.py +137 -0
  36. frontengine-0.0.58/frontengine/utils/multi_language/simplified_chinese.py +137 -0
  37. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/multi_language/traditional_chinese.py +16 -3
  38. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine.egg-info/PKG-INFO +1 -1
  39. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine.egg-info/SOURCES.txt +15 -22
  40. {frontengine-0.0.56 → frontengine-0.0.58}/pyproject.toml +1 -1
  41. frontengine-0.0.56/frontengine/ui/menu/how_to_menu.py +0 -14
  42. frontengine-0.0.56/frontengine/ui/menu/language_menu.py +0 -43
  43. frontengine-0.0.56/frontengine/ui/page/scene_setting/scene_setting_ui.py +0 -48
  44. frontengine-0.0.56/frontengine/ui/page/scene_setting/scene_tabs/Image.py +0 -61
  45. frontengine-0.0.56/frontengine/ui/page/scene_setting/scene_tabs/gif.py +0 -74
  46. frontengine-0.0.56/frontengine/ui/page/scene_setting/scene_tabs/scene_control.py +0 -78
  47. frontengine-0.0.56/frontengine/ui/page/scene_setting/scene_tabs/sound.py +0 -44
  48. frontengine-0.0.56/frontengine/ui/page/scene_setting/scene_tabs/tableview_model.py +0 -65
  49. frontengine-0.0.56/frontengine/ui/page/scene_setting/scene_tabs/text.py +0 -77
  50. frontengine-0.0.56/frontengine/ui/page/scene_setting/scene_tabs/ui.py +0 -56
  51. frontengine-0.0.56/frontengine/ui/page/scene_setting/scene_tabs/video.py +0 -88
  52. frontengine-0.0.56/frontengine/ui/page/scene_setting/scene_tabs/web.py +0 -74
  53. frontengine-0.0.56/frontengine/user_setting/gif/gif_setting.py +0 -5
  54. frontengine-0.0.56/frontengine/user_setting/image/image_setting.py +0 -4
  55. frontengine-0.0.56/frontengine/user_setting/sound/sound_setting.py +0 -4
  56. frontengine-0.0.56/frontengine/user_setting/text/text_setting.py +0 -5
  57. frontengine-0.0.56/frontengine/user_setting/video/video_setting.py +0 -6
  58. frontengine-0.0.56/frontengine/user_setting/web/web_setting.py +0 -4
  59. frontengine-0.0.56/frontengine/utils/browser/__init__.py +0 -0
  60. frontengine-0.0.56/frontengine/utils/file/__init__.py +0 -0
  61. frontengine-0.0.56/frontengine/utils/json/__init__.py +0 -0
  62. frontengine-0.0.56/frontengine/utils/logging/__init__.py +0 -0
  63. frontengine-0.0.56/frontengine/utils/multi_language/__init__.py +0 -0
  64. frontengine-0.0.56/frontengine/utils/multi_language/language_wrapper.py +0 -26
  65. frontengine-0.0.56/frontengine/utils/redirect_manager/__init__.py +0 -0
  66. {frontengine-0.0.56 → frontengine-0.0.58}/LICENSE +0 -0
  67. {frontengine-0.0.56 → frontengine-0.0.58}/README.md +0 -0
  68. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/__init__.py +0 -0
  69. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/gif/__init__.py +0 -0
  70. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/gif/paint_gif.py +0 -0
  71. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/image/__init__.py +0 -0
  72. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/image/paint_image.py +0 -0
  73. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/load/__init__.py +0 -0
  74. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/load/load_someone_make_ui.py +0 -0
  75. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/scene/__init__.py +0 -0
  76. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/sound_player/__init__.py +0 -0
  77. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/sound_player/sound_effect.py +0 -0
  78. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/sound_player/sound_player.py +0 -0
  79. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/text/__init__.py +0 -0
  80. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/video/__init__.py +0 -0
  81. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/show/web/__init__.py +0 -0
  82. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/system_tray/__init__.py +0 -0
  83. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/system_tray/extend_system_tray.py +0 -0
  84. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/__init__.py +0 -0
  85. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/color/__init__.py +0 -0
  86. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/color/global_color.py +0 -0
  87. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/dialog/__init__.py +0 -0
  88. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/dialog/save_file_dialog.py +0 -0
  89. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/menu/__init__.py +0 -0
  90. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/menu/help_menu.py +0 -0
  91. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/__init__.py +0 -0
  92. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/control_center/__init__.py +0 -0
  93. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/gif/__init__.py +0 -0
  94. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/image/__init__.py +0 -0
  95. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/scene_setting/__init__.py +0 -0
  96. {frontengine-0.0.56/frontengine/ui/page/scene_setting/scene_tabs → frontengine-0.0.58/frontengine/ui/page/scene_setting/scene_page}/__init__.py +0 -0
  97. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/sound_player/__init__.py +0 -0
  98. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/text/__init__.py +0 -0
  99. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/video/__init__.py +0 -0
  100. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/ui/page/web/__init__.py +0 -0
  101. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/user_setting/__init__.py +0 -0
  102. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/user_setting/user_setting_file.py +0 -0
  103. {frontengine-0.0.56/frontengine/user_setting/gif → frontengine-0.0.58/frontengine/utils}/__init__.py +0 -0
  104. {frontengine-0.0.56/frontengine/user_setting/image → frontengine-0.0.58/frontengine/utils/browser}/__init__.py +0 -0
  105. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/browser/browser.py +0 -0
  106. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/exception/__init__.py +0 -0
  107. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/exception/exception_tags.py +0 -0
  108. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/exception/exceptions.py +0 -0
  109. {frontengine-0.0.56/frontengine/user_setting/sound → frontengine-0.0.58/frontengine/utils/file}/__init__.py +0 -0
  110. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/file/open/__init__.py +0 -0
  111. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/file/open/open_file.py +0 -0
  112. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/file/save/__init__.py +0 -0
  113. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/file/save/save_file.py +0 -0
  114. {frontengine-0.0.56/frontengine/user_setting/text → frontengine-0.0.58/frontengine/utils/json}/__init__.py +0 -0
  115. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/json/json_file.py +0 -0
  116. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/json_format/__init__.py +0 -0
  117. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/json_format/json_process.py +0 -0
  118. {frontengine-0.0.56/frontengine/user_setting/video → frontengine-0.0.58/frontengine/utils/logging}/__init__.py +0 -0
  119. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/logging/loggin_instance.py +0 -0
  120. {frontengine-0.0.56/frontengine/user_setting/web → frontengine-0.0.58/frontengine/utils/multi_language}/__init__.py +0 -0
  121. {frontengine-0.0.56/frontengine/utils → frontengine-0.0.58/frontengine/utils/redirect_manager}/__init__.py +0 -0
  122. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine/utils/redirect_manager/redirect_manager_class.py +0 -0
  123. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine.egg-info/dependency_links.txt +0 -0
  124. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine.egg-info/requires.txt +0 -0
  125. {frontengine-0.0.56 → frontengine-0.0.58}/frontengine.egg-info/top_level.txt +0 -0
  126. {frontengine-0.0.56 → frontengine-0.0.58}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: frontengine
3
- Version: 0.0.56
3
+ Version: 0.0.58
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
@@ -18,7 +18,6 @@ from frontengine.ui.page.video.video_setting_ui import VideoSettingUI
18
18
  from frontengine.ui.page.control_center.control_center_ui import ControlCenterUI
19
19
  from frontengine.ui.page.scene_setting.scene_setting_ui import SceneSettingUI
20
20
  from frontengine.ui.main_ui import FrontEngineMainUI
21
- from frontengine.ui.page.scene_setting.scene_setting_ui import SceneControlSettingUI
22
21
  from frontengine.ui.main_ui import FrontEngine_EXTEND_TAB
23
22
  from frontengine.utils.redirect_manager.redirect_manager_class import RedirectManager
24
23
 
@@ -26,6 +25,6 @@ __all__ = [
26
25
  "start_front_engine", "GifWidget", "SoundPlayer", "SoundEffectWidget", "TextWidget",
27
26
  "WebWidget", "ImageWidget", "VideoWidget", "language_wrapper", "load_extend_ui_file", "load_ui_file",
28
27
  "TextSettingUI", "WEBSettingUI", "GIFSettingUI", "ImageSettingUI", "SoundPlayerSettingUI",
29
- "VideoSettingUI", "ControlCenterUI", "SceneSettingUI", "FrontEngineMainUI", "SceneControlSettingUI",
28
+ "VideoSettingUI", "ControlCenterUI", "SceneSettingUI", "FrontEngineMainUI",
30
29
  "FrontEngine_EXTEND_TAB", "RedirectManager"
31
30
  ]
@@ -5,4 +5,3 @@ class ExtendGraphicScene(QGraphicsScene):
5
5
 
6
6
  def __init__(self):
7
7
  super().__init__()
8
-
@@ -12,6 +12,7 @@ class ExtendGraphicView(QGraphicsView):
12
12
  Qt.WindowType.WindowType_Mask |
13
13
  Qt.WindowType.Tool
14
14
  )
15
+ self.setStyleSheet("background:transparent")
15
16
  self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
16
17
  self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
17
18
  self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
@@ -23,7 +24,7 @@ class ExtendGraphicView(QGraphicsView):
23
24
  pass
24
25
  else:
25
26
  current_position = event.position()
26
- scene_position = self.mapToScene(QPoint(current_position.x(), current_position.y()))
27
+ scene_position = self.mapToScene(QPoint(int(current_position.x()), int(current_position.y())))
27
28
  view_width = self.viewport().width()
28
29
  view_height = self.viewport().height()
29
30
  horizon_scale = current_position.x() / view_width
@@ -1,12 +1,11 @@
1
1
  from typing import List, Dict
2
2
 
3
- from PySide6.QtWidgets import QGraphicsProxyWidget, QWidget
3
+ from PySide6.QtWidgets import QGraphicsProxyWidget
4
+ from frontengine.show.scene.extend_graphic_view import ExtendGraphicView
4
5
 
5
6
  from frontengine.show.gif.paint_gif import GifWidget
6
7
  from frontengine.show.image.paint_image import ImageWidget
7
- from frontengine.show.load.load_someone_make_ui import load_ui_file, read_extend_ui
8
8
  from frontengine.show.scene.extend_graphic_scene import ExtendGraphicScene
9
- from frontengine.show.scene.extend_graphic_view import ExtendGraphicView
10
9
  from frontengine.show.sound_player.sound_player import SoundPlayer
11
10
  from frontengine.show.text.draw_text import TextWidget
12
11
  from frontengine.show.video.video_player import VideoWidget
@@ -20,25 +19,25 @@ class SceneManager(object):
20
19
  ):
21
20
  super().__init__()
22
21
  self.graphic_scene = ExtendGraphicScene()
23
- self.graphic_view = ExtendGraphicView(self.graphic_scene)
24
22
  self.widget_list: List[QGraphicsProxyWidget] = list()
23
+ self.view_list: List[ExtendGraphicView] = []
25
24
 
26
- def add_image(self, image_setting: Dict[str, str]) -> QGraphicsProxyWidget:
27
- image_path = image_setting.get("file_path")
25
+ def add_image(self, setting_dict: Dict) -> QGraphicsProxyWidget:
26
+ image_path = setting_dict.get("file_path")
28
27
  image_widget = ImageWidget(image_path)
29
- opacity = float(image_setting.get("opacity")) / 100
28
+ opacity = float(setting_dict.get("opacity")) / 100
30
29
  opacity = opacity if opacity is not None else 0.2
31
30
  image_widget.set_ui_variable(opacity)
32
31
  proxy_widget = self.graphic_scene.addWidget(image_widget)
33
32
  self.widget_list.append(proxy_widget)
34
33
  return proxy_widget
35
34
 
36
- def add_gif(self, gif_setting: Dict[str, str]) -> QGraphicsProxyWidget:
37
- gif_image_path = gif_setting.get("file_path")
35
+ def add_gif(self, setting_dict: Dict) -> QGraphicsProxyWidget:
36
+ gif_image_path = setting_dict.get("file_path")
38
37
  gif_widget = GifWidget(gif_image_path)
39
- speed = int(gif_setting.get("speed"))
38
+ speed = int(setting_dict.get("speed"))
40
39
  speed = speed if speed is not None else 100
41
- opacity = float(gif_setting.get("opacity")) / 100
40
+ opacity = float(setting_dict.get("opacity")) / 100
42
41
  opacity = opacity if opacity is not None else 0.2
43
42
  gif_widget.set_gif_variable(speed)
44
43
  gif_widget.set_ui_variable(opacity)
@@ -46,30 +45,32 @@ class SceneManager(object):
46
45
  self.widget_list.append(proxy_widget)
47
46
  return proxy_widget
48
47
 
49
- def add_sound(self, sound_setting: Dict[str, str]) -> QGraphicsProxyWidget:
50
- sound_path = sound_setting.get("file_path")
48
+ def add_sound(self, setting_dict: Dict) -> QGraphicsProxyWidget:
49
+ sound_path = setting_dict.get("file_path")
51
50
  sound_widget = SoundPlayer(sound_path)
52
- volume = float(sound_setting.get("volume")) / 100
51
+ volume = float(setting_dict.get("volume")) / 100
53
52
  volume = volume if volume is not None else 1
54
53
  sound_widget.set_player_variable(volume)
55
54
  proxy_widget = self.graphic_scene.addWidget(sound_widget)
56
55
  self.widget_list.append(proxy_widget)
57
56
  return proxy_widget
58
57
 
59
- def add_text(self, text_setting: Dict[str, str]) -> QGraphicsProxyWidget:
60
- text = text_setting.get("text")
58
+ def add_text(self, setting_dict: Dict) -> QGraphicsProxyWidget:
59
+ text = setting_dict.get("text")
61
60
  text_widget = TextWidget(text)
62
- font_size = int(text_setting.get("font_size"))
61
+ font_size = int(setting_dict.get("font_size"))
63
62
  font_size = font_size if font_size is not None else 100
64
- opacity = float(text_setting.get("opacity")) / 100
63
+ opacity = float(setting_dict.get("opacity")) / 100
65
64
  opacity = opacity if opacity is not None else 0.2
65
+ alignment = setting_dict.get("alignment", "Center")
66
66
  text_widget.set_ui_variable(opacity)
67
67
  text_widget.set_font_variable(font_size)
68
+ text_widget.set_alignment(alignment)
68
69
  proxy_widget = self.graphic_scene.addWidget(text_widget)
69
70
  self.widget_list.append(proxy_widget)
70
71
  return proxy_widget
71
72
 
72
- def add_video(self, video_setting: Dict[str, str]) -> QGraphicsProxyWidget:
73
+ def add_video(self, video_setting: Dict) -> QGraphicsProxyWidget:
73
74
  video_path = video_setting.get("file_path")
74
75
  video_widget = VideoWidget(video_path)
75
76
  opacity = float(video_setting.get("opacity")) / 100
@@ -84,31 +85,12 @@ class SceneManager(object):
84
85
  self.widget_list.append(proxy_widget)
85
86
  return proxy_widget
86
87
 
87
- def add_web(self, web_setting: Dict[str, str]) -> QGraphicsProxyWidget:
88
- url = web_setting.get("url")
88
+ def add_web(self, setting_dict: Dict) -> QGraphicsProxyWidget:
89
+ url = setting_dict.get("url")
89
90
  web_widget = WebWidget(url)
90
- opacity = float(web_setting.get("opacity")) / 100
91
+ opacity = float(setting_dict.get("opacity")) / 100
91
92
  opacity = opacity if opacity is not None else 0.2
92
- enable_input = web_setting.get("enable_input")
93
- enable_input = enable_input if enable_input is not None else False
94
93
  web_widget.set_ui_variable(opacity)
95
- web_widget.set_ui_window_flag(enable_input=enable_input)
96
94
  proxy_widget = self.graphic_scene.addWidget(web_widget)
97
95
  self.widget_list.append(proxy_widget)
98
96
  return proxy_widget
99
-
100
- def add_extend_ui_file(self, ui_setting_dict: Dict[str, str]) -> QGraphicsProxyWidget:
101
- ui_path = ui_setting_dict.get("file_path")
102
- extend_widget = load_ui_file(ui_path)
103
- proxy_widget = self.graphic_scene.addWidget(extend_widget)
104
- self.widget_list.append(proxy_widget)
105
- return proxy_widget
106
-
107
- def add_extend_ui(self, ui: QWidget) -> QGraphicsProxyWidget:
108
- extend_widget = read_extend_ui(ui)
109
- proxy_widget = self.graphic_scene.addWidget(extend_widget)
110
- self.widget_list.append(proxy_widget)
111
- return proxy_widget
112
-
113
- def show(self):
114
- self.graphic_view.showMaximized()
@@ -8,7 +8,8 @@ from PySide6.QtWidgets import QWidget
8
8
 
9
9
  class TextWidget(QWidget):
10
10
 
11
- def __init__(self, text: str, draw_location_x: int = 0, draw_location_y: int = 0):
11
+ def __init__(self, text: str, draw_location_x: int = 0, draw_location_y: int = 0,
12
+ alignment: str = "Center"):
12
13
  super().__init__()
13
14
  self.draw_location_x = draw_location_x
14
15
  self.draw_location_y = draw_location_y
@@ -17,6 +18,16 @@ class TextWidget(QWidget):
17
18
  self.text = text
18
19
  self.font_size = 100
19
20
  self.opacity = 0.2
21
+ if alignment == "TopLeft":
22
+ self.alignment = (Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignLeft)
23
+ elif alignment == "TopRight":
24
+ self.alignment = (Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignRight)
25
+ elif alignment == "BottomLeft":
26
+ self.alignment = (Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignLeft)
27
+ elif alignment == "BottomRight":
28
+ self.alignment = (Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignRight)
29
+ else:
30
+ self.alignment = Qt.AlignmentFlag.AlignCenter
20
31
  self.draw_font = QFontDatabase.font(self.font().family(), "", self.font_size)
21
32
  # Set Icon
22
33
  self.icon_path = Path(os.getcwd() + "/je_driver_icon.ico")
@@ -40,6 +51,21 @@ class TextWidget(QWidget):
40
51
  def set_ui_variable(self, opacity: float = 0.2) -> None:
41
52
  self.opacity = opacity
42
53
 
54
+ def set_font(self):
55
+ self.draw_font = QFontDatabase.font(self.font().family(), "", self.font_size)
56
+
57
+ def set_alignment(self, alignment: str = "Center") -> None:
58
+ if alignment == "TopLeft":
59
+ self.alignment = (Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignLeft)
60
+ elif alignment == "TopRight":
61
+ self.alignment = (Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignRight)
62
+ elif alignment == "BottomLeft":
63
+ self.alignment = (Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignLeft)
64
+ elif alignment == "BottomRight":
65
+ self.alignment = (Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignRight)
66
+ else:
67
+ self.alignment = Qt.AlignmentFlag.AlignCenter
68
+
43
69
  def paintEvent(self, event) -> None:
44
70
  painter = QPainter(self)
45
71
  painter.setFont(
@@ -49,7 +75,7 @@ class TextWidget(QWidget):
49
75
  painter.setOpacity(self.opacity)
50
76
  painter.drawText(
51
77
  QRect(self.draw_location_x, self.draw_location_y, self.width(), self.height()),
52
- Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignLeft,
78
+ int(self.alignment),
53
79
  self.text
54
80
  )
55
81
  painter.restore()
@@ -62,4 +88,3 @@ class TextWidget(QWidget):
62
88
 
63
89
  def mouseGrabber(self) -> None:
64
90
  super().mouseGrabber()
65
-
@@ -7,6 +7,7 @@ from PySide6.QtMultimedia import QMediaPlayer, QAudioOutput
7
7
  from PySide6.QtMultimediaWidgets import QVideoWidget
8
8
  from PySide6.QtWidgets import QMessageBox
9
9
 
10
+ from frontengine.utils.logging.loggin_instance import front_engine_logger
10
11
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
11
12
 
12
13
 
@@ -17,13 +18,11 @@ class VideoWidget(QVideoWidget):
17
18
  self.opacity: float = 0.2
18
19
  self.volume: float = 1
19
20
  self.play_rate: float = 1
20
- self.setAttribute(
21
- Qt.WidgetAttribute.WA_TranslucentBackground
22
- )
23
21
  self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
24
22
  self.media_player = QMediaPlayer()
25
23
  self.video_path = Path(video_path)
26
24
  if self.video_path.exists() and self.video_path.is_file():
25
+ front_engine_logger.info("start_play_video")
27
26
  self.video_file_path = str(self.video_path)
28
27
  self.audioOutput = QAudioOutput()
29
28
  # QUrl non ascii path encode, Avoid read wrong path and file name
@@ -2,7 +2,7 @@ import os
2
2
  from pathlib import Path
3
3
 
4
4
  from PySide6.QtCore import Qt, QUrl
5
- from PySide6.QtGui import QIcon
5
+ from PySide6.QtGui import QIcon, QAction
6
6
  from PySide6.QtWebEngineWidgets import QWebEngineView
7
7
  from PySide6.QtWidgets import QMessageBox
8
8
 
@@ -35,6 +35,13 @@ class WebWidget(QWebEngineView):
35
35
  if self.icon_path.exists() and self.icon_path.is_file():
36
36
  self.setWindowIcon(QIcon(str(self.icon_path)))
37
37
 
38
+ def contextMenuEvent(self, event):
39
+ self.menu = self.createStandardContextMenu()
40
+ self.close_action = QAction("Close")
41
+ self.close_action.triggered.connect(self.close)
42
+ self.menu.addAction(self.close_action)
43
+ self.menu.popup(event.globalPos())
44
+
38
45
  def set_ui_variable(self, opacity: float = 0.2) -> None:
39
46
  self.opacity = opacity
40
47
  self.setWindowOpacity(opacity)
@@ -56,6 +63,8 @@ class WebWidget(QWebEngineView):
56
63
  )
57
64
 
58
65
  def mousePressEvent(self, event) -> None:
66
+ # if event.button() == Qt.MouseButton.MiddleButton:
67
+ print(event.button())
59
68
  super().mousePressEvent(event)
60
69
 
61
70
  def mouseDoubleClickEvent(self, event) -> None:
@@ -68,12 +68,3 @@ def choose_video(
68
68
  return choose_file(
69
69
  trigger_ui=trigger_ui, file_filter=file_filter, extensions=extensions,
70
70
  warning_message=language_wrapper.language_word_dict.get("video_setting_message_box"))
71
-
72
-
73
- def choose_scene_json(
74
- trigger_ui: QWidget, file_filter: str = "Json (*.json;)", extensions: list = None) -> str:
75
- front_engine_logger.info("choose_scene_json")
76
- extensions = extensions or [".json"]
77
- return choose_file(
78
- trigger_ui=trigger_ui, file_filter=file_filter, extensions=extensions,
79
- warning_message=language_wrapper.language_word_dict.get("scene_choose_message_box"))
@@ -10,6 +10,7 @@ from qt_material import apply_stylesheet, QtStyleTools
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
13
+ from frontengine.ui.menu.how_to_menu import build_how_to_menu
13
14
  from frontengine.ui.menu.language_menu import build_language_menu
14
15
  from frontengine.ui.page.control_center.control_center_ui import ControlCenterUI
15
16
  from frontengine.ui.page.gif.gif_setting_ui import GIFSettingUI
@@ -95,6 +96,7 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
95
96
  self.tab_widget.addTab(widget(), widget_name)
96
97
  build_language_menu(self)
97
98
  build_help_menu(self)
99
+ build_how_to_menu(self)
98
100
  # Set Icon
99
101
  self.icon_path = Path(os.getcwd() + "/je_driver_icon.ico")
100
102
  self.icon = QIcon(str(self.icon_path))
@@ -0,0 +1,25 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
4
+ from frontengine.utils.browser.browser import open_browser
5
+
6
+ if TYPE_CHECKING:
7
+ from frontengine.ui.main_ui import FrontEngineMainUI
8
+ from PySide6.QtGui import QAction
9
+
10
+ from frontengine.utils.multi_language.language_wrapper import language_wrapper
11
+
12
+
13
+ def build_how_to_menu(ui_we_want_to_set: FrontEngineMainUI) -> None:
14
+ ui_we_want_to_set.how_to_menu = ui_we_want_to_set.menu_bar.addMenu(
15
+ language_wrapper.language_word_dict.get("doc_menu_label")
16
+ )
17
+ ui_we_want_to_set.how_to_menu.open_doc_action = QAction(
18
+ language_wrapper.language_word_dict.get("doc_menu_open_doc")
19
+ )
20
+ ui_we_want_to_set.how_to_menu.open_doc_action.triggered.connect(
21
+ lambda: open_browser("https://frontengine.readthedocs.io/en/latest/")
22
+ )
23
+ ui_we_want_to_set.how_to_menu.addAction(
24
+ ui_we_want_to_set.how_to_menu.open_doc_action
25
+ )
@@ -0,0 +1,88 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ if TYPE_CHECKING:
6
+ from frontengine.ui.main_ui import FrontEngineMainUI
7
+ from PySide6.QtGui import QAction
8
+ from PySide6.QtWidgets import QMessageBox
9
+
10
+ from frontengine.user_setting.user_setting_file import user_setting_dict
11
+ from frontengine.utils.multi_language.language_wrapper import language_wrapper
12
+
13
+
14
+ def build_language_menu(ui_we_want_to_set: FrontEngineMainUI) -> None:
15
+ ui_we_want_to_set.language_menu = ui_we_want_to_set.menu_bar.addMenu(
16
+ language_wrapper.language_word_dict.get("menu_bar_language")
17
+ )
18
+ ui_we_want_to_set.language_menu.change_to_english_language_action = QAction(
19
+ language_wrapper.language_word_dict.get("language_menu_bar_english")
20
+ )
21
+ ui_we_want_to_set.language_menu.change_to_english_language_action.triggered.connect(
22
+ lambda: set_language("English", ui_we_want_to_set)
23
+ )
24
+ ui_we_want_to_set.language_menu.change_to_traditional_chinese_language_action = QAction(
25
+ language_wrapper.language_word_dict.get("language_menu_bar_traditional_chinese")
26
+ )
27
+ ui_we_want_to_set.language_menu.change_to_traditional_chinese_language_action.triggered.connect(
28
+ lambda: set_language("Traditional_Chinese", ui_we_want_to_set)
29
+ )
30
+ ui_we_want_to_set.language_menu.change_to_simplified_chinese_language_action = QAction(
31
+ language_wrapper.language_word_dict.get("language_menu_bar_simplified_chinese")
32
+ )
33
+ ui_we_want_to_set.language_menu.change_to_simplified_chinese_language_action.triggered.connect(
34
+ lambda: set_language("Simplified_Chinese", ui_we_want_to_set)
35
+ )
36
+ ui_we_want_to_set.language_menu.change_to_deutsch_language_action = QAction(
37
+ language_wrapper.language_word_dict.get("language_menu_bar_germany")
38
+ )
39
+ ui_we_want_to_set.language_menu.change_to_deutsch_language_action.triggered.connect(
40
+ lambda: set_language("Deutsch", ui_we_want_to_set)
41
+ )
42
+ ui_we_want_to_set.language_menu.change_to_russian_language_action = QAction(
43
+ language_wrapper.language_word_dict.get("language_menu_bar_russian")
44
+ )
45
+ ui_we_want_to_set.language_menu.change_to_russian_language_action.triggered.connect(
46
+ lambda: set_language("Russian", ui_we_want_to_set)
47
+ )
48
+ ui_we_want_to_set.language_menu.change_to_france_language_action = QAction(
49
+ language_wrapper.language_word_dict.get("language_menu_bar_french")
50
+ )
51
+ ui_we_want_to_set.language_menu.change_to_france_language_action.triggered.connect(
52
+ lambda: set_language("France", ui_we_want_to_set)
53
+ )
54
+ ui_we_want_to_set.language_menu.change_to_italian_language_action = QAction(
55
+ language_wrapper.language_word_dict.get("language_menu_bar_italian")
56
+ )
57
+ ui_we_want_to_set.language_menu.change_to_italian_language_action.triggered.connect(
58
+ lambda: set_language("Italy", ui_we_want_to_set)
59
+ )
60
+ ui_we_want_to_set.language_menu.addAction(
61
+ ui_we_want_to_set.language_menu.change_to_english_language_action
62
+ )
63
+ ui_we_want_to_set.language_menu.addAction(
64
+ ui_we_want_to_set.language_menu.change_to_traditional_chinese_language_action
65
+ )
66
+ ui_we_want_to_set.language_menu.addAction(
67
+ ui_we_want_to_set.language_menu.change_to_simplified_chinese_language_action
68
+ )
69
+ ui_we_want_to_set.language_menu.addAction(
70
+ ui_we_want_to_set.language_menu.change_to_deutsch_language_action
71
+ )
72
+ ui_we_want_to_set.language_menu.addAction(
73
+ ui_we_want_to_set.language_menu.change_to_russian_language_action
74
+ )
75
+ ui_we_want_to_set.language_menu.addAction(
76
+ ui_we_want_to_set.language_menu.change_to_france_language_action
77
+ )
78
+ ui_we_want_to_set.language_menu.addAction(
79
+ ui_we_want_to_set.language_menu.change_to_italian_language_action
80
+ )
81
+
82
+
83
+ def set_language(language: str, ui_we_want_to_set: FrontEngineMainUI) -> None:
84
+ language_wrapper.reset_language(language)
85
+ user_setting_dict.update({"language": language})
86
+ message_box = QMessageBox(ui_we_want_to_set)
87
+ message_box.setText(language_wrapper.language_word_dict.get("language_menu_bar_please_restart_messagebox"))
88
+ message_box.show()
@@ -145,11 +145,7 @@ class ControlCenterUI(QWidget):
145
145
 
146
146
  def clear_scene(self) -> None:
147
147
  front_engine_logger.info("clear_scene")
148
- self.scene_setting_ui.scene_control_setting.close_scene()
149
-
150
- def clear_chat(self):
151
- front_engine_logger.info("clear_chat")
152
- self.chat_scene_ui.close_chat_ui()
148
+ self.scene_setting_ui.close_scene()
153
149
 
154
150
  def clear_all(self) -> None:
155
151
  front_engine_logger.info("clear_all")
@@ -159,7 +155,7 @@ class ControlCenterUI(QWidget):
159
155
  self.gif_setting_ui.gif_widget_list.clear()
160
156
  self.sound_player_setting_ui.sound_widget_list.clear()
161
157
  self.text_setting_ui.text_widget_list.clear()
162
- self.scene_setting_ui.scene_control_setting.close_scene()
158
+ self.scene_setting_ui.close_scene()
163
159
 
164
160
  def redirect(self) -> None:
165
161
  if not redirect_manager_instance.std_out_queue.empty():
@@ -1,10 +1,11 @@
1
1
  from PySide6.QtCore import Qt
2
2
  from PySide6.QtGui import QGuiApplication
3
3
  from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QSlider, QPushButton, QMessageBox, \
4
- QCheckBox
4
+ QCheckBox, QDialog
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
9
  from frontengine.utils.logging.loggin_instance import front_engine_logger
9
10
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
10
11
 
@@ -19,7 +20,7 @@ class GIFSettingUI(QWidget):
19
20
  self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
20
21
  # Init variable
21
22
  self.gif_widget_list = list()
22
- self.show_all_screen = True
23
+ self.show_all_screen = False
23
24
  self.ready_to_play = False
24
25
  # Opacity setting
25
26
  self.opacity_slider = QSlider()
@@ -103,11 +104,22 @@ class GIFSettingUI(QWidget):
103
104
  message_box.show()
104
105
  else:
105
106
  front_engine_logger.info("start_play_gif")
106
- if not self.show_all_screen:
107
+ monitors = QGuiApplication.screens()
108
+ if self.show_all_screen is False and len(monitors) <= 1:
107
109
  gif_widget = self._create_gif_widget()
108
110
  gif_widget.showFullScreen()
111
+ elif self.show_all_screen is False and len(monitors) >= 2:
112
+ input_dialog, combobox = monitor_choose_dialog(self, monitors)
113
+ result = input_dialog.exec_()
114
+ if result == QDialog.DialogCode.Accepted:
115
+ select_monitor_index = int(combobox.currentText())
116
+ if len(monitors) > select_monitor_index:
117
+ monitor = monitors[select_monitor_index]
118
+ gif_widget = self._create_gif_widget()
119
+ gif_widget.setScreen(monitor)
120
+ gif_widget.move(monitor.availableGeometry().topLeft())
121
+ gif_widget.showFullScreen()
109
122
  else:
110
- monitors = QGuiApplication.screens()
111
123
  for monitor in monitors:
112
124
  gif_widget = self._create_gif_widget()
113
125
  gif_widget.setScreen(monitor)
@@ -1,10 +1,11 @@
1
1
  from PySide6.QtCore import Qt
2
2
  from PySide6.QtGui import QScreen, QGuiApplication
3
3
  from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QPushButton, QMessageBox, \
4
- QCheckBox
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
9
  from frontengine.utils.logging.loggin_instance import front_engine_logger
9
10
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
10
11
 
@@ -88,11 +89,22 @@ class ImageSettingUI(QWidget):
88
89
  message_box.show()
89
90
  else:
90
91
  front_engine_logger.info("start_play_image")
91
- if not self.show_all_screen:
92
+ monitors = QGuiApplication.screens()
93
+ if self.show_all_screen is False and len(monitors) <= 1:
92
94
  image_widget = self._create_image_widget()
93
95
  image_widget.showFullScreen()
96
+ elif self.show_all_screen is False and len(monitors) >= 2:
97
+ input_dialog, combobox = monitor_choose_dialog(self, monitors)
98
+ result = input_dialog.exec_()
99
+ if result == QDialog.DialogCode.Accepted:
100
+ select_monitor_index = int(combobox.currentText())
101
+ if len(monitors) > select_monitor_index:
102
+ 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()
94
107
  else:
95
- monitors = QGuiApplication.screens()
96
108
  for monitor in monitors:
97
109
  image_widget = self._create_image_widget()
98
110
  image_widget.setScreen(monitor)
@@ -0,0 +1,96 @@
1
+ import json
2
+
3
+ from PySide6.QtCore import Qt
4
+ from PySide6.QtGui import QGuiApplication
5
+ from PySide6.QtWidgets import QWidget, QGridLayout, QPlainTextEdit, QPushButton, QCheckBox, QDialog
6
+
7
+ from frontengine.show.scene.extend_graphic_view import ExtendGraphicView
8
+ from frontengine.ui.page.utils import monitor_choose_dialog
9
+ from frontengine.user_setting.scene_setting import choose_scene_json, write_scene_file, scene_json
10
+ from frontengine.utils.multi_language.language_wrapper import language_wrapper
11
+
12
+
13
+ class SceneManagerUI(QWidget):
14
+
15
+ def __init__(self, scene_manager):
16
+ super().__init__()
17
+ self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
18
+ self.grid_layout = QGridLayout()
19
+ self.grid_layout.setContentsMargins(0, 0, 0, 0)
20
+ self.scene = scene_manager
21
+ self.show_all_screen = False
22
+ # Read and write scene json button
23
+ self.read_scene_json_button = QPushButton(language_wrapper.language_word_dict.get("scene_input"))
24
+ self.read_scene_json_button.clicked.connect(self.update_scene_json)
25
+ self.write_scene_json_button = QPushButton(language_wrapper.language_word_dict.get("scene_output"))
26
+ self.write_scene_json_button.clicked.connect(lambda: write_scene_file(self))
27
+ # Json plaintext
28
+ self.json_plaintext = QPlainTextEdit()
29
+ self.json_plaintext.setReadOnly(True)
30
+ self.json_plaintext.appendPlainText("{}")
31
+ # Start button
32
+ self.start_button = QPushButton(
33
+ language_wrapper.language_word_dict.get("scene_start")
34
+ )
35
+ self.start_button.clicked.connect(self.start_scene)
36
+ # Show on all screen
37
+ self.show_on_all_screen_checkbox = QCheckBox(
38
+ language_wrapper.language_word_dict.get("Show on all screen")
39
+ )
40
+ self.show_on_all_screen_checkbox.clicked.connect(self.set_show_all_screen)
41
+ # Add to layout
42
+ self.grid_layout.addWidget(self.json_plaintext, 0, 0, -1, -1)
43
+ self.grid_layout.addWidget(self.read_scene_json_button, 1, 0)
44
+ self.grid_layout.addWidget(self.write_scene_json_button, 1, 1)
45
+ self.grid_layout.addWidget(self.show_on_all_screen_checkbox, 2, 0)
46
+ self.grid_layout.addWidget(self.start_button, 3, 0, 1, 0)
47
+ self.setLayout(self.grid_layout)
48
+
49
+ def set_show_all_screen(self) -> None:
50
+ self.show_all_screen = self.show_on_all_screen_checkbox.isChecked()
51
+
52
+ def start_scene(self):
53
+ scene: dict = json.loads(self.json_plaintext.toPlainText())
54
+ scene_add_function = {
55
+ "TEXT": self.scene.add_text,
56
+ "IMAGE": self.scene.add_image,
57
+ "GIF": self.scene.add_gif,
58
+ "SOUND": self.scene.add_sound,
59
+ "VIDEO": self.scene.add_video,
60
+ "WEB": self.scene.add_web
61
+ }
62
+ for scene_dict in scene.values():
63
+ scene_widget_type = scene_dict.get("type")
64
+ function = scene_add_function.get(scene_widget_type)
65
+ function(setting_dict=scene_dict)
66
+ monitors = QGuiApplication.screens()
67
+ if self.show_all_screen is False and len(monitors) <= 1:
68
+ graphic_view = ExtendGraphicView(self.scene.graphic_scene)
69
+ self.scene.view_list.append(graphic_view)
70
+ graphic_view.showMaximized()
71
+ elif self.show_all_screen is False and len(monitors) >= 2:
72
+ input_dialog, combobox = monitor_choose_dialog(self, monitors)
73
+ result = input_dialog.exec_()
74
+ if result == QDialog.DialogCode.Accepted:
75
+ select_monitor_index = int(combobox.currentText())
76
+ if len(monitors) > select_monitor_index:
77
+ monitor = monitors[select_monitor_index]
78
+ graphic_view = ExtendGraphicView(self.scene.graphic_scene)
79
+ graphic_view.setScreen(monitor)
80
+ graphic_view.move(monitor.availableGeometry().topLeft())
81
+ self.scene.view_list.append(graphic_view)
82
+ graphic_view.showMaximized()
83
+ else:
84
+ for monitor in monitors:
85
+ graphic_view = ExtendGraphicView(self.scene.graphic_scene)
86
+ graphic_view.setScreen(monitor)
87
+ graphic_view.move(monitor.availableGeometry().topLeft())
88
+ self.scene.view_list.append(graphic_view)
89
+ graphic_view.showMaximized()
90
+
91
+ def update_scene_json(self):
92
+ choose_scene_json(self)
93
+ self.renew_json_plain_text()
94
+
95
+ def renew_json_plain_text(self):
96
+ self.json_plaintext.setPlainText(json.dumps(scene_json, indent=4))