Почему второй вызов приложения Python не фокусируется на клавиатуре? - PullRequest
0 голосов
/ 27 января 2011

Если я вызываю этот класс дважды, первый раз клавиатурный фокус переходит к окну. Во второй раз это не так. Клавиша Escape используется для закрытия окна и работает с первого раза. Во второй раз нужно щелкнуть мышью по окну, чтобы сработала клавиша escape. Что-то происходит, когда фокус не возвращается назад? Я сталкивался с этой проблемой несколько раз, но здесь я поймал ее как можно проще. Вот код:

from Tkinter import *

class Dialog(): # imagine this having buttons and stuff
    def __init__(self):
        root = Tk()
        root.bind_all('<Escape>', lambda event :root.destroy())
        root.mainloop()

# this simulates running a python terminal app which invokes a dialog at some point
Dialog() # this one accepts the key action
Dialog() # this one needs a mouse click in the window first

Ответы [ 2 ]

0 голосов
/ 02 февраля 2011

На Mac, использующем X11 в качестве оконного сервера и использующем либо X-терминал, либо обычный терминал, фокус всегда переходит к диалоговому окну, поэтому клавиша escape работает оба раза. В Windows XP, запущенной с терминала cmd.exe, фокус только в первый раз переходит к диалогу. Во второй раз вы должны сначала щелкнуть окно. Однако использование root.focus_force () делает его работающим везде. Большое спасибо!

0 голосов
/ 01 февраля 2011

Я только что запустил код, и в Windows 7 он тоже не фокусируется.

В какой ОС вы его запускаете?

Кроме того, вы можете принудительно фокусироваться на корневом окне, бросая эту строку.

root.focus_force ()

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