modlink_ui

1from .main_window import MainWindow
2
3__all__ = ["MainWindow"]
class MainWindow(qfluentwidgets.window.fluent_window.MSFluentWindow):
17class MainWindow(MSFluentWindow):
18    """Application shell for ModLink Studio."""
19
20    def __init__(self, engine: QtModLinkBridge, parent: QWidget | None = None) -> None:
21        super().__init__(parent=parent)
22        self.engine = engine
23
24        # Keep window composition stable when chart views use OpenGL viewport.
25        if hasattr(self, "setMicaEffectEnabled"):
26            self.setMicaEffectEnabled(False)
27
28        self.live_page = LivePage(engine=self.engine, parent=self)
29        self.replay_page = ReplayPage(engine=self.engine, parent=self)
30        self.device_page = DevicePage(engine=self.engine, parent=self)
31        self.settings_page = SettingsPage(engine=self.engine, parent=self)
32
33        self.addSubInterface(self.live_page, FIF.HOME, "实时展示", isTransparent=False)
34        self.addSubInterface(self.replay_page, FIF.PLAY, "回放", isTransparent=False)
35        self.addSubInterface(
36            self.device_page,
37            FIF.IOT,
38            "设备",
39            position=NavigationItemPosition.BOTTOM,
40            isTransparent=False,
41        )
42        self.addSubInterface(
43            self.settings_page,
44            FIF.SETTING,
45            "设置",
46            position=NavigationItemPosition.BOTTOM,
47            isTransparent=False,
48        )
49
50        self.resize(980, 680)
51        self.setMinimumSize(920, 640)
52        self.setWindowTitle("ModLink Studio")
53
54        self.navigationInterface.setIndicatorAnimationEnabled(False)
55        if hasattr(self.navigationInterface, "setAcrylicEnabled"):
56            self.navigationInterface.setAcrylicEnabled(False)
57        self.stackedWidget.setAnimationEnabled(False)
58
59    def showEvent(self, event: QShowEvent) -> None:
60        super().showEvent(event)
61        self._apply_windows_round_corner_preference()
62
63    def _apply_windows_round_corner_preference(self) -> None:
64        if sys.platform != "win32":
65            return
66
67        try:
68            hwnd = int(self.winId())
69            # Win11 DWM attribute values.
70            DWMWA_WINDOW_CORNER_PREFERENCE = 33
71            DWMWCP_ROUND = 2
72            corner_preference = ctypes.c_int(DWMWCP_ROUND)
73
74            ctypes.windll.dwmapi.DwmSetWindowAttribute(
75                ctypes.c_void_p(hwnd),
76                ctypes.c_uint(DWMWA_WINDOW_CORNER_PREFERENCE),
77                ctypes.byref(corner_preference),
78                ctypes.sizeof(corner_preference),
79            )
80        except Exception:
81            # Best-effort only; unsupported OS/builds should continue normally.
82            return

Application shell for ModLink Studio.

MainWindow( engine: modlink_ui.bridge.engine.QtModLinkBridge, parent: PyQt6.QtWidgets.QWidget | None = None)
20    def __init__(self, engine: QtModLinkBridge, parent: QWidget | None = None) -> None:
21        super().__init__(parent=parent)
22        self.engine = engine
23
24        # Keep window composition stable when chart views use OpenGL viewport.
25        if hasattr(self, "setMicaEffectEnabled"):
26            self.setMicaEffectEnabled(False)
27
28        self.live_page = LivePage(engine=self.engine, parent=self)
29        self.replay_page = ReplayPage(engine=self.engine, parent=self)
30        self.device_page = DevicePage(engine=self.engine, parent=self)
31        self.settings_page = SettingsPage(engine=self.engine, parent=self)
32
33        self.addSubInterface(self.live_page, FIF.HOME, "实时展示", isTransparent=False)
34        self.addSubInterface(self.replay_page, FIF.PLAY, "回放", isTransparent=False)
35        self.addSubInterface(
36            self.device_page,
37            FIF.IOT,
38            "设备",
39            position=NavigationItemPosition.BOTTOM,
40            isTransparent=False,
41        )
42        self.addSubInterface(
43            self.settings_page,
44            FIF.SETTING,
45            "设置",
46            position=NavigationItemPosition.BOTTOM,
47            isTransparent=False,
48        )
49
50        self.resize(980, 680)
51        self.setMinimumSize(920, 640)
52        self.setWindowTitle("ModLink Studio")
53
54        self.navigationInterface.setIndicatorAnimationEnabled(False)
55        if hasattr(self.navigationInterface, "setAcrylicEnabled"):
56            self.navigationInterface.setAcrylicEnabled(False)
57        self.stackedWidget.setAnimationEnabled(False)
engine
live_page
replay_page
device_page
settings_page
def showEvent(self, event: PyQt6.QtGui.QShowEvent) -> None:
59    def showEvent(self, event: QShowEvent) -> None:
60        super().showEvent(event)
61        self._apply_windows_round_corner_preference()

showEvent(self, a0: Optional[QShowEvent])