我有一个 tinter Toplevel 窗口,我想在没有框架或标题栏的情况下出现并且稍微透明,然后当鼠标移动到窗口上时固定。为此,我同时使用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)
Run Code Online (Sandbox Code Playgroud)
我曾尝试在此处使用类似问题的答案,但这会导致窗口具有所有标准的操作系统装饰,但关闭、最小化和放大按钮被简单地禁用。有没有办法可以摆脱标题栏,但仍然保留我的绑定?
我希望以下程序退出<Any-KeyPress>活动.
from tkinter import *
root = Tk()
root.overrideredirect(True)
root.bind('<Any-KeyPress>', lambda e: root.destroy())
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
这适用于Windows操作系统.但是,除非我root.overrideredirect(True)从上面的代码中删除该行,否则这在Ubuntu上不起作用.
这是预期的行为吗?
或者有没有办法让我的程序在仍然使用的同时工作root.overrideredirect(True)?
编辑
我刚刚在SO看到了类似的问题,Bryan Oakley建议使用root.focus_force()它,但它没有帮助.
编辑2
我使用的root.attributes('-fullscreen', True)不是root.overrideredirect(True)像这里建议的那样,现在似乎有效.
我有一个想要全屏运行的 python tkinter 应用程序。当我取消对 overrideredirect 的注释时,窗口管理器(Gnome、Linux)将无法再将击键转发到应用程序。
(片段,蟒蛇)
# make it cover the entire screen
w, h = master.winfo_screenwidth(), master.winfo_screenheight()
self.root.geometry("%dx%d+0+0" % (w, h))
self.root.focus_set() # <-- move focus to this widget
self.root.bind('<Escape>', self.root.quit())
#self.root.overrideredirect(True)
Run Code Online (Sandbox Code Playgroud)
我找到了用于 Tcl/Tk 的 window::or 包,它应该可以解决这个错误。我将如何安装它,是否可以在我的 python 应用程序中使用它?