Сделать виджет Tkinter сфокусированным

У меня есть скрипт, который использует Tkinter для всплывающего окна с сообщением. Как мне убедиться, что он требует фокусировки, чтобы пользователь не пропустил его и явно закрыл окно? код:

root = Tk()
to_read = "Stuff" 
w = Label(root, text=to_read)
w.pack()
root.mainloop()

Ответы на вопрос(2)

Что сработало для меня:

root.wm_attributes("-topmost", 1)
root.focus_force()

Я нашел этот и какой-то другой способ сделать это в win32Вот

Решение Вопроса

focus_force метод. Смотрите следующее:

Универсальные методы виджетов

Но обратите внимание на документацию:

w.focus_force ()

Принудительный фокус ввода на виджет. Это невежливо. Лучше подождать, пока оконный менеджер даст вам фокус. Смотрите также .grab_set_global () ниже.

Обновление: должно работать наroot, Например, попробуйте запустить следующий код. Это создаст окно, и вы можете переключить фокус. Через 5 секунд он попытается захватить фокус.

from Tkinter import *

root = Tk()
root.after(5000, lambda: root.focus_force())
root.mainloop()
 ars01 окт. 2010 г., 22:47
@ Али:after не было необходимости: нужно было только ввести задержку, прежде чем заставить фокус, чтобы я мог запустить приложение и иметь достаточно времени, чтобы перенести фокус на другое приложение для демонстрационных целей. Рад, что это работает для вас сейчас. :)
 ars01 окт. 2010 г., 22:19
@ Али: Я обновил вопрос, чтобы ответить на ваш комментарий.
 Ali01 окт. 2010 г., 22:37
похоже, сейчас работает. Я опустил функцию .after, хотя. Благодарю.
 Ali01 окт. 2010 г., 22:11
команда в порядке, но куда она идет в моем коде? Кажется, мой формат будет root.focus_force, но он дает ошибку атрибута.
 nbro11 дек. 2014 г., 23:57
@ars, какfocus_force дляText виджет при запуске программы? Потому что я использовалfocus_force, но есть проблема: обаIDLE иtinter.Text виджет имеет свой собственный курсор, но когда я пытаюсь писать, он пишет в интерактивной оболочке IDLE, а не вtinter.Text виджет, даже если там есть курсор.

Ваш ответ на вопрос