在MacOS上,tkinter始终保持最佳状态
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在MacOS上,tkinter始终保持最佳状态相关的知识,希望对你有一定的参考价值。
我正在尝试创建一个屏幕“窗帘”,除了鼠标光标的附近区域外,它会阻挡部分屏幕。在Windows上,使用root.wm_attributes("-topmost", "true")
保持窗口在顶部,即使我专注于另一个应用程序,完美。但是,在MacOS上运行代码时,如果窗口的焦点丢失,它将不会保持在最顶层。什么是MacOS相当于-topmost
窗口管理器属性,它将始终保持窗口在顶部,无论焦点?
import tkinter as tk
class TransparentWindow(tk.Toplevel):
"""
This class is just a Toplevel window.
"""
def __init__(self, background="white", opacity=0.7):
super(TransparentWindow, self).__init__()
#self.master = master
self.configure(background=background)
self.overrideredirect(True)
self.wm_attributes("-alpha", opacity)
self.wm_attributes("-topmost", "true")
self.lift()
if __name__ == '__main__':
root = tk.Tk()
TransparentWindow()
root.mainloop()
在High Sierra虚拟机中运行此代码导致Toplevel在选择另一个窗口时不会始终位于顶部。
在Mac OS上使用overrideredirect(True)
禁用很多东西,如bind
,Button
印刷机和一些事件,说实话,我不知道为什么。 (如果有人知道请评论)。至少在我的Mac上我有这个问题,我已经阅读并看到并非所有的Mac用户都有这个问题。
所以这就是root.wm_attributes("-topmost", "true")
无法正常工作的原因。但不要担心我有一个解决方法。
从你的代码我可以告诉你,你想要一个无边框窗口,这是我如何做所有绑定和事件仍然工作。
我首先把
overrideredirect(True)
放在下一行overrideredirect(False)
在这种情况下你也不需要root.lift()
。
好的,试试这个代码,看看按钮是否正常按下。
样品
import tkinter as tk
root = tk.Tk()
root.overrideredirect(True)
# root.overrideredirect(False) # Uncomment and try again.
tk.Button(root, text="Borderless").pack()
root.wm_attributes("-topmost", "true")
root.wm_attributes("-alpha", 0.7)
root.wm_attributes("-topmost", "true")
# Doesn't matter if you use lift() or not with the use of root.overrideredirect(False) as well
root.lift()
root.mainloop()
我希望这对你有所帮助。
这是您的代码,它完全符合您的要求(至少在我的Mac上)。
import tkinter as tk
class TransparentWindow(tk.Toplevel):
"""
This class is just a Toplevel window.
"""
def __init__(self, background="white", opacity=0.7):
super(TransparentWindow, self).__init__()
#self.master = master
self.configure(background=background)
self.overrideredirect(True)
self.overrideredirect(False)
self.wm_attributes("-alpha", opacity)
self.wm_attributes("-topmost", "true")
# self.lift()
if __name__ == '__main__':
root = tk.Tk()
TransparentWindow()
root.mainloop()
以上是关于在MacOS上,tkinter始终保持最佳状态的主要内容,如果未能解决你的问题,请参考以下文章