【发布时间】:2014-01-10 10:28:59
【问题描述】:
我有一个着色的顶层窗口,我想在没有框架或标题栏的情况下显示它,并且稍微透明,然后当鼠标在窗口上移动时变为实心。为此,我同时使用Toplevel.overrideredirect(True) 和Toplevel.attributes('-alpha', 0.75)。为此,我将<Enter> 和<Leave> 事件绑定到一个函数。
这些都在单独尝试时起作用,但是当我将 overrideredirect 设置为 True 时,鼠标进入和离开的绑定不再起作用。当我点击窗口时绑定调用,然后当我移动鼠标时调用,而不是当光标进入或离开窗口时调用。
我也尝试将这些绑定到框架,但没有进一步的运气。
toplevel = Toplevel(root)
toplevel.overrideredirect(True)
toplevel.attributes('-alpha', 0.75)
toplevel.bind('<Enter>', lambda x: mouseMovement(command='enter'))
toplevel.bind('<Leave>', lambda x: mouseMovement(command='leave'))
def mouseMovement(command):
print('Callback: ' + command)
if command == 'enter':
toplevel.attributes('-alpha', 1)
elif command == 'leave':
toplevel.attributes('-alpha', 0.75)
我已尝试使用类似问题here 的答案,但这会导致窗口具有所有标准操作系统装饰,但关闭、最小化和放大按钮被禁用。有没有办法让我摆脱标题栏,但仍然保留我的绑定?
【问题讨论】:
-
只是对你的代码风格的评论:当
command是mouseMovement的位置参数时,你怎么会lambda x: mouseMovement(command='enter')?执行lambda x: mouseMovement('enter')就可以了。 -
这就是我喜欢的写法。我认为它根本不会影响代码。
-
不,它没有。我只是好奇。
-
在没有
command=的情况下使用位置参数对我来说会更pythonic吗? -
什么平台?这是在 OSX 上吗?