我在创建Python 3 tkinter应用程序时遇到了问题。我目前正在使用Mac OSX系统进行开发,但我通常使用Windows操作系统。
我希望该应用程序占据整个屏幕,而无需窗口管理器的标题栏和框架环绕应用程序,通常被称为全屏无边框窗口(游戏中经常使用)。
我尝试使用root.attributes("-fullscreen", True)
与root.overrideredirect(True)
和root.wm_attributes("-topmost", 1)
。然而,包含root.overrideredirect(True)
行不允许它进入真正的全屏模式; 它仍然显示Mac Dock和任务栏,并且它还会破坏应用程序中的键绑定。如果没有root.overrideredirect(True)
行,则应用程序会进入全屏模式(隐藏Dock和任务栏),但窗口不会填满整个屏幕; 它在底部留下一个间隙,而且还保留窗口管理器的标题栏和框架/边框。
以下是我的代码示例:
import tkinter as tk
class App(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent)
self.parent = parent
self.initUI()
def initUI(self):
self.parent.title("Fullscreen Application")
self.pack(fill="both", expand=True, side="top")
self.parent.wm_state("zoomed")
self.parent.bind("<F11>", self.fullscreen_toggle)
self.parent.bind("<Escape>", self.fullscreen_cancel)
self.fullscreen_toggle()
self.label = tk.Label(self, text="Fullscreen", font=("default",120), fg="black")
self.label.pack(side="top", fill="both", expand=True)
def fullscreen_toggle(self, event="none"):
self.parent.focus_set()
self.parent.overrideredirect(True)
self.parent.attributes("-fullscreen", True)
self.parent.wm_attributes("-topmost", 1)
def fullscreen_cancel(self, event="none"):
self.parent.overrideredirect(False)
self.parent.attributes("-fullscreen", False)
self.parent.wm_attributes("-topmost", 0)
self.centerWindow()
def centerWindow(self):
sw = self.parent.winfo_screenwidth()
sh = self.parent.winfo_screenheight()
w = sw*0.7
h = sh*0.7
x = (sw-w)/2
y = (sh-h)/2
self.parent.geometry("%dx%d+%d+%d" % (w, h, x, y))
if __name__ == "__main__":
root = tk.Tk()
App(root).pack(side="top", fill="both", expand=True)
root.mainloop()
我希望有人能够帮助!谢谢!
编辑:我刚在Windows电脑上测试了一下。没有 self.parent.overrideredirect(True)
,它会创建应用程序,并完美地按照期望工作(全屏但没有窗口管理器边框或标题栏)。这必须只是OSX的问题。