Установить фокус на окно Tkinter (зависит от платформы?) - PullRequest
6 голосов
/ 23 мая 2011

У меня есть программа Tkinter, и она запускается следующим образом: python myWindow.py все запускает нормально, но окно находится за терминалом, который я использую для его запуска.

Есть ли способ заставить его захватить фокус и стать основным приложением? Это зависит от платформы?

Ответы [ 3 ]

2 голосов
/ 24 мая 2011

Это может быть особенностью вашего конкретного оконного менеджера. Одна вещь, которую нужно попробовать, это чтобы ваше приложение вызывало focus_force при запуске, после того как все виджеты были созданы.

0 голосов
/ 15 мая 2016

Сочетание различных других методов, найденных в сети, работает на OS X 10.11 и Python 3.5.1, работающих в venv, и должно работать на других платформах.В OS X оно также предназначается для приложения по идентификатору процесса, а не по имени приложения.

from tkinter import Tk
import os
import subprocess
import platform


def raise_app(root: Tk):
    root.attributes("-topmost", True)
    if platform.system() == 'Darwin':
        tmpl = 'tell application "System Events" to set frontmost of every process whose unix id is {} to true'
        script = tmpl.format(os.getpid())
        output = subprocess.check_call(['/usr/bin/osascript', '-e', script])
    root.after(0, lambda: root.attributes("-topmost", False))

Вы вызываете его прямо перед вызовом mainloop(), например:

raise_app(root)
root.mainloop()
0 голосов
/ 13 августа 2011

Вы пробовали это в конце своего сценария?

root.iconify()
root.update()
root.deiconify()

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...