在 Python(和 OS X)中将焦点设置到 Tkinter 窗口

Posted

技术标签:

【中文标题】在 Python(和 OS X)中将焦点设置到 Tkinter 窗口【英文标题】:set focus to Tkinter window in Python (and OS X) 【发布时间】:2014-06-20 00:58:11 【问题描述】:

考虑以下 MWE:

from Tkinter import *
root = Tk()
Label(root,text="foo").pack()
root.mainloop()

我想设置一个新创建的Tkinter 窗口,该窗口不包含任何“可聚焦”控件,例如前台按钮。如果我(从 shell)运行上面的代码,窗口将处于非活动状态,因此无法对键绑定做出反应。

有没有办法让这样一个窗口出现在前台?

[编辑] 我正在使用 Python 2.7.5 和 OS X Mavericks。我从终端窗口运行代码,即使正确创建了 Tkinter 窗口,焦点仍停留在该窗口。

【问题讨论】:

你检查过那个帖子吗? ***.com/questions/3842220/… @mlwn 是的,它对我不起作用 【参考方案1】:

刚刚在 IDLE 上尝试过:

>>> from Tkinter import *
>>> root=Tk()
>>> root.focus_force()
>>> Label(root,text="foo").pack()
>>> root.mainloop()

工作就像一个魅力!(编辑:显然在 Windows 上!)

编辑:This is a standard behavior

【讨论】:

无论是否使用 root.focus_force(),对我来说都一样 & 是新窗口的焦点吗?因为我的情况并非如此 窗口同时使用到前台,最大的问题是它太小了。我认为这是一个特定于平台的问题。 小不是问题,它是由 OP 设计的。问题是它没有得到焦点 这两种方法都让我关注,所以我说它可能是特定于平台的。【参考方案2】:

也许你做错了什么,因为下面对我来说非常适合: 可能是平台问题??

from Tkinter import *
root = Tk()
Label(root,text="foo").pack()

root.geometry("%dx%d+%d+%d" % (200,100,0,0))
#made it a bigger window to see better...
root.wm_attributes("-topmost", 1)
root.focus_force()

root.mainloop()

【讨论】:

从命令行执行时对我不起作用(python 2.7.5,OS X Mavericks)。焦点停留在终端窗口,不切换到窗口。 猜猜看,你的第一个例子对我有用......我什至不需要调用 root.wm_attributes 和 root.focus_force......我正在使用 LinuxMint,并从终端调用它...... .我猜是关于平台的......我对苹果不熟悉:(((( @muffel:也许你可以试着在里面放一些按钮,然后把它隐藏起来。希望它能抓住焦点?? (作为一种解决方法)

以上是关于在 Python(和 OS X)中将焦点设置到 Tkinter 窗口的主要内容,如果未能解决你的问题,请参考以下文章

Mac OS X 上的焦点跟随鼠标(加上自动抬起)

无法在 OS X 中将 Chrome 设置为默认网络浏览器

如何在使用fancybox打开的新页面中将焦点设置在文本框上

在Mac OS X 10.6上的Python中,无法在Matplotlib中将字体更改为Helvetica

如何在 UIToolbar 完成按钮中将焦点从一个 UIButton 设置到另一个 UIButton

在 Mac OS X 10.12.5 中将 matplotlib.pyplot 导入为 plt 错误