gpt4 book ai didi

python tkinter 全帧 vs 消息框焦点

转载 作者:太空狗 更新时间:2023-10-30 00:11:41 25 4
gpt4 key购买 nike

我正在用这样的代码创建一个全帧(无装饰)窗口(在 python 3.2 中使用 tkinter):

self.root = Tk()    
self.W, self.H = self.root.winfo_screenwidth(), self.root.winfo_screenheight()
self.root.overrideredirect(1) # full screen, no menu or borders
self.root.geometry("%dx%d+0+0" % (self.W, self.H))

当我尝试打开文件对话框或消息框时,它们出现在全框窗口下。在打开其中一个对话框之前,我可以通过在主窗口上调用 withdraw() 来验证这一点。例如,

   file = tkinter.filedialog.askopenfilename(parent=self.root) # UNDER main window

在 Windows 上我对此没有问题,只有在 fedora 14 和 ubuntu 12.04 上我才注意到它。 (我还没有在 Mac 上测试过)。我正在将 parent 传递给对话,但他们似乎没有注意。有人可以帮助我了解我做错了什么吗?谢谢。

最佳答案

在窗口上调用 .overrideredirect(1) 在 Windows 和 X11 上有不同的含义。在 Windows 上,它告诉操作系统禁用窗口边框的绘制。在 X11 上,它告诉窗口管理器完全忽略该窗口。实际上,它在 Windows 上的效果应该与在 X11 上的效果相同,但事实并非如此。

之所以调用 .overrideredirect(1) 导致窗口停留在顶部是因为 X11 对其没有任何控制(因为窗口的显示不由窗口管理器处理) ).程序窗口和窗口管理器是完全独立的,因此实现标准窗口堆叠没有意义。

只有 tkinter,你无法阻止这种行为,因为 tkinter 并不是真正的问题根源。可能有一种方法可以使用 X11 Python 绑定(bind)来显示没有框架的窗口,但这会导致特定于平台的代码。

您可能需要重新考虑删除窗口边框。有没有可能的选择?包括窗口边框的全屏窗口是一个不错的选择。由于可访问性原因(无法移动、最小化、最大化等),在最好的情况下删除窗口边框不是一个好主意。此外,就个人而言,作为 Linux 用户,我使用各种功能(例如窗口标签、阴影按钮)自定义了我的窗口边框,并且经常使用它们。移除窗口边框将阻止使用此类功能。

关于python tkinter 全帧 vs 消息框焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12012385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com