跳转至

tkflu.toplevel · FluToplevel 子窗口

子窗口。

FluToplevel 是 :class:~tkflu.window.FluWindow 的子窗口版本, 共享同一套主题与图标设置。

FluToplevel

Bases: Toplevel, BWm, DObject

Fluent设计的子窗口

源代码位于: tkflu\toplevel.py
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
class FluToplevel(Toplevel, BWm, DObject):
    """Fluent设计的子窗口"""

    def __init__(self, *args, mode="light", **kwargs):
        """
        初始化类

        :param args: 参照tkinter.TK.__init__
        :param className: 参照tkinter.TK.__init__
        :param mode: Fluent主题模式 分为 “light” “dark”
        :param kwargs: 参照tkinter.TK.__init__
        """

        Toplevel.__init__(self, *args, **kwargs)

        self._init(mode)

        self.custom = False

        # 设置窗口图标:直接用内嵌 base64 建图,不落盘(见 .icons 模块说明)
        from .icons import icon_photoimage

        self._icon_photo = icon_photoimage("light", master=self)
        self.iconphoto(False, self._icon_photo)

        self.bind("<Configure>", self._event_configure, add="+")
        self.bind("<Escape>", self._event_key_esc, add="+")
        self.protocol("WM_DELETE_WINDOW", self._event_delete_window)

    def destroy(self):
        """关闭子窗口前先回收待执行的 ``after`` 回调(详见 :mod:`tkflu._after`)。"""
        from ._after import cancel_all_after

        cancel_all_after(self)
        super().destroy()

    def theme(self, mode: str):
        """把子窗口(连同里面的控件)切到 ``mode``。

        实现交给 :meth:`tkflu.bwm.BWm.theme`(统一过渡)。
        旧实现是逐个 ``widget.theme()`` + ``widget.update()``——那正是
        "一个一个变色、期间窗口点不动"的根源。
        """
        super().theme(mode)
        self._mode = mode

__init__(*args, mode='light', **kwargs)

初始化类

:param args: 参照tkinter.TK.init :param className: 参照tkinter.TK.init :param mode: Fluent主题模式 分为 “light” “dark” :param kwargs: 参照tkinter.TK.init

源代码位于: tkflu\toplevel.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
def __init__(self, *args, mode="light", **kwargs):
    """
    初始化类

    :param args: 参照tkinter.TK.__init__
    :param className: 参照tkinter.TK.__init__
    :param mode: Fluent主题模式 分为 “light” “dark”
    :param kwargs: 参照tkinter.TK.__init__
    """

    Toplevel.__init__(self, *args, **kwargs)

    self._init(mode)

    self.custom = False

    # 设置窗口图标:直接用内嵌 base64 建图,不落盘(见 .icons 模块说明)
    from .icons import icon_photoimage

    self._icon_photo = icon_photoimage("light", master=self)
    self.iconphoto(False, self._icon_photo)

    self.bind("<Configure>", self._event_configure, add="+")
    self.bind("<Escape>", self._event_key_esc, add="+")
    self.protocol("WM_DELETE_WINDOW", self._event_delete_window)

destroy()

关闭子窗口前先回收待执行的 after 回调(详见 :mod:tkflu._after)。

源代码位于: tkflu\toplevel.py
42
43
44
45
46
47
def destroy(self):
    """关闭子窗口前先回收待执行的 ``after`` 回调(详见 :mod:`tkflu._after`)。"""
    from ._after import cancel_all_after

    cancel_all_after(self)
    super().destroy()

theme(mode)

把子窗口(连同里面的控件)切到 mode。

实现交给 :meth:tkflu.bwm.BWm.theme(统一过渡)。 旧实现是逐个 widget.theme() + widget.update()——那正是 "一个一个变色、期间窗口点不动"的根源。

源代码位于: tkflu\toplevel.py
49
50
51
52
53
54
55
56
57
def theme(self, mode: str):
    """把子窗口(连同里面的控件)切到 ``mode``。

    实现交给 :meth:`tkflu.bwm.BWm.theme`(统一过渡)。
    旧实现是逐个 ``widget.theme()`` + ``widget.update()``——那正是
    "一个一个变色、期间窗口点不动"的根源。
    """
    super().theme(mode)
    self._mode = mode