【问题标题】:Python: Python WX GUI app from stealing focus from consolePython:Python WX GUI 应用程序从控制台窃取焦点
【发布时间】:2015-01-14 17:28:12
【问题描述】:
我正在运行一个 Python 控制台应用程序(Linux 控制台,用 Python 编写的应用程序),作为运行的一部分,Python GUI (wx) 子进程在许多不同的地方启动。有什么方法可以让 wx GUI 在不从控制台窃取焦点的情况下启动,以便用户可以不间断地继续使用控制台应用程序?有什么方法可以防止这种情况发生,无论是从 Python GUI 应用程序端、从启动 GUI 端的控制台应用程序还是从 Linux 端?
谢谢
【问题讨论】:
标签:
python
linux
console
focus
wxwidgets
【解决方案1】:
我发现了一个至少可以在 Windows 上运行的 hack,你可以在 Linux 上尝试一下。在显示新 Frame 之前,请将其禁用。
frame.Disable()
frame.Show()
frame.Enable()
【解决方案2】:
在图形界面方面,Linux 是一个特别多样化的系统。除了数十种 GUI 工具包和框架外,至少还有十几种常用的窗口管理器——它们是系统中控制焦点的部分。
好消息是有一个标准:Extended Window Manager Hints。
虽然我不会假装已阅读所有内容,但我认为您不能无条件地阻止焦点切换到新窗口 - 这有很多充分的理由。
您可以做的只是在完成后将焦点移回控制台 - 如果有可靠的方法来识别它,例如 PID 或窗口名称。您可能想查看wmctrl,这是一个可以与任何实现 EWMH 标准的窗口管理器交互的工具。例如,您可以使用subprocess 与它进行交互。