tkflu.popupwindow · FluPopupWindow 弹出窗口
通用弹出窗口。
FluPopupWindow 提供淡入淡出、置顶、自动关闭等行为的无边框窗口,
是提示气泡、右键菜单等组件的基础。
FluPopupWindow
Bases: Toplevel
源代码位于: tkflu\popupwindow.py
9 10 11 12 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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | |
destroy()
销毁弹出窗口前先收回它子树里的 after 回调。
.. warning::
弹出窗口里可能装着会做过渡动画的组件(菜单项就是
:class:~tkflu.button.FluButton)。Toplevel 被销毁时,
Tkinter 会删掉这些控件自己注册的 Tcl 命令,但不会取消已经
排队的 after——那些定时器随后触发时就会在控制台刷
.. code-block:: text
invalid command name "140234567890123run"
所以这里必须显式清一遍(FluWindow / FluToplevel 早就这么做了,
弹出窗口是漏网的那个)。
源代码位于: tkflu\popupwindow.py
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | |
popup(x, y)
在 (x, y) 处显示弹出窗口(带淡入动画)。
.. note::
旧实现的条件写成 if FRAMES_COUNT != 0 or FRAME_DELAY != 0,
但动画里要做 alpha = step / FRAMES_COUNT。只要用户把帧数
设成 0、只留帧间隔(set_animation_steps(0) +
set_animation_step_time(30),这是很自然的"我只想调慢一点"),
淡入就会 ZeroDivisionError——表现为菜单打不开、提示气泡
一悬停就报错。这里同时修两件事:条件改成"两个都非零",
并且给帧数兜底成 1。
源代码位于: tkflu\popupwindow.py
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | |