Python Tkinter GUI Всегда минимизирует загрузку - PullRequest
1 голос
/ 31 января 2012

У меня есть простой скрипт Python, который загружает графический интерфейс (созданный с помощью Tkinter) при запуске.Я использовал py2app для преобразования скрипта Python в приложение двойного щелчка для OSX.При нажатии на приложение Python выполняет скрипт.Однако загрузка Python (и GUI) сведена к минимуму.Пользователь должен щелкнуть по значку Python на панели задач, чтобы вывести графический интерфейс на передний план.

Я попытался добавить lift () в главное окно Tkiner, но, похоже, это не дает никакого эффекта.(Я пробовал подобные методы без успеха в выводе окна на передний план).После двойного щелчка по приложению пользователям трудно сказать, что происходит, если GUI не всплывает (особенно, если они ожидают появления какого-то определенного интерфейса).Я использую Lion и у меня не было этой проблемы на Leapord.

Любая помощь будет принята с благодарностью.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 10 сентября 2015

Я только что столкнулся с той же проблемой и нашел общую причину.Проблема со всеми опубликованными обходными решениями заключается в том, что они либо не работают для исполняемого файла, построенного на py2app (обходной путь -topmost), либо имеют серьезные побочные эффекты (iconify / deiconify работает, но вызывает все будущие модальные окна изприложение перестало быть запрещенным, включая tkMessageBox и tkFileDialog).

Проблема вызвана argv_emulation py2app, который включен по умолчанию.Эта опция помещает некоторый специфичный для OSX код события Carbon в загрузчик приложения, который можно найти по адресу dist / appname / Contents / Resources / __ boot __.py вашего встроенного пакета приложений.Мне не нужна argv_emulation, поэтому на данный момент я просто отключил эту функцию, изменив argv_emulation на False в словаре OPTIONS файла setup.py, созданного py2applet:

OPTIONS = {'argv_emulation': False}

3 голосов
/ 02 февраля 2012

Мне удалось заставить tkinter хорошо играть на Lion, добавив следующее перед root.mainloop ():

 root.attributes('-topmost', 1)
 root.update()
 root.attributes('-topmost', 0)
1 голос
/ 30 марта 2012

Хорошо, я нашел решение, которое работает.Запуск из оболочки отличается от запуска скомпилированного приложения. Это решение устраняет проблему с фоновым окном под Lion для моего скомпилированного приложения Python / Tkinter

    root.iconify()
    root.deiconify()

Окно по-прежнему отображается по умолчанию в фоновом режиме, но затем появляетсяпосле того, как iconify и deiconify будут вызваны сразу перед вызовом root.mainloop ()

...