Tkinter 方法 lift()、lower()、deiconify() 和 geometry() 在 Linux 上不起作用(正常或根本不起作用) 薄荷肉桂

Tkinter methods lift(), lower(), deiconify() and geometry() not working (properly or at all) on Linux Mint Cinnamon

提问人:Babber 提问时间:11/15/2023 最后编辑:Babber 更新时间:11/22/2023 访问量:44

问:

以下所有问题都适用于 Linux Mint 21 Cinnamon(基于 Ubuntu 22,使用 muffin 窗口管理器),而 Xubuntu 22 上一切正常。

请考虑 Python3 解释器中的以下步骤:

from tkinter import *
root=Tk()

然后,可以通过调用或使用窗口管理器的专用按钮来最小化小部件窗口。root.iconify()

  • 问题#1:不会将窗口带回桌面,它会保持最小化。root.deiconify()
    • 一个次优的解决方法是 ,但这会改变桌面上的小部件位置及其在任务栏上的图标。root.withdraw(); root.deiconify()
    • 提示:在 Xubuntu 上,立即执行,而在 LM 上,在最小化小部件后挂起几秒钟,就好像它在等待什么一样?..root.iconify()root.iconify()

如果您不最小化此窗口,而是将任何应用程序的另一个窗口移到其上,则将面临...

  • 问题#2:不会将其提升到顶部,它隐藏在另一个窗口下方。root.lift()
    • 作为一种解决方法,可以完成这项工作,但它抢走了焦点。 不过,这可能是一个完美的解决方法。root.focus_force(); root.lift()root.attributes('-topmost', 1); root.attributes('-topmost', 0)

举起它后,比方说,你想再次放下它......

  • 问题#3:什么也做不了。在这里,我也只知道 的次优解决方法,它将焦点放在一个甚至不可见的小部件上。root.lower()root.focus_force(); root.lower()

  • 问题#4:请考虑以下脚本:

from tkinter import *

root = Tk()
root.geometry('200x200-0-0')

def func():
    root.geometry('-100-100')
    root.geometry('-0-0')
    print(root.geometry())

b = Button(root, text='push me', command=func)
b.pack()

root.mainloop()

在 Cinnamon 上,第一次按下按钮会使整个小部件向上和向左跳跃约 20 像素,随后单击按钮不会执行任何操作。尽管如此,即使它显然不存在,它也会继续打印。该示例也适用于其他坐标,但不一定是 。在 Xubuntu 上,小部件按预期保留在角落里。200x200-0-0-0-0

我想这不是类似问题的广泛列表,至少在 Linux Mint 3 Cinnamon 上最新版本的 python3-tk (3.10.8-1~22.04~21) 是这样。我想知道问题究竟隐藏在哪里,因为这些问题都没有出现在 Xubuntu 22 上。我猜,这与不同的窗口管理器有关。

任何见解和解决方法将非常欢迎!

python linux tkinter 窗口管理器 cinnamon

评论

0赞 TheLizzard 11/15/2023
Linux Mint 21 使用什么窗口系统?您始终可以使用窗口系统的 API 来告诉它降低/列出/图标化/去图标化窗口,而不是 .tkinter
0赞 Babber 11/15/2023
@TheLizzard 谢谢你的提示。我的 Linux Mint 使用松饼。我想,这可能是一条路,但我希望我的应用程序能够在所有基于 Ubuntu 的发行版上运行,独立于它们的窗口管理器。目前,我不知道其他窗口管理器的情况如何。所以我的希望是找到一个独立于 wm 的解决方案。

答: 暂无答案