2010-10-08 2 views
1

Я работаю над графическим приложением, и в начале запуска я хотел бы задать пользователю один вопрос конфигурации. Графическая структура (Panda3D) имеет уродливые диалоговые окна по умолчанию, поэтому я хотел бы использовать что-то вроде tkInter для предоставления модального диалога. Я попытался это:Получение клавиатуры назад от tkinter

import Tkinter 
import tkMessageBox 

root = Tkinter.Tk() 
# hide the root window 
root.withdraw() 

config.PLAY_MUSIC = tkMessageBox.askyesno("My App", 
     "Would you like this app to play music from your iTunes collection?") 

root.destroy() 

Это делает то, что я хочу, но это, кажется, маршрут всех дальнейших событий клавиатуры к Tkinter, а не мое Panda3D приложению. После этого диалога мне не нужно ничего делать с tk.

Я могу поместить диалог tk в отдельное приложение, которое, как я полагаю, цепляется за мое, но мне интересно, есть ли способ убить tk и вернуть клавиатуру, не выходя полностью из моего приложения.

Обновление: Пробовал root.quit(), который, похоже, возвращает клавиатуру, но я получаю сообщение об ошибке «Fatal Python: PyEval_RestoreThread: NULL tstate» при выходе из моей программы, что не является идеальным.

ответ

1

Вы пробовали:

grab_release (самость)
Что делает: захватить релиз для этого виджета, если в данный момент установлен.

Где «Грабеж направляет все события этому и потоку виджетов в приложении».

как в:

root.grab_release() 

Надеется, что вы еще не пробовали это.

+0

Тот же результат, что и root.quit(), но спасибо в любом случае. –