Рубрики
Без рубрики

Tkinter: Как показать / скрыть окно

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Сегодня мы собираемся взглянуть на Tkinter! Мне было интересно, как можно было скрывать кадр, а затем повторно показывать его с помощью TKinter, и я продолжал находить нити (например, этот один ), который говорил об использовании снятия () и деконирования (), но не на самом деле Предоставьте любой полезный код. В wxpython я сделал такую вещь, используя Pubsub Отказ Мы пойдем на три разных версиях, как скрывать и показать корневую раму.

Мой первый пример

Много из примеров кода TKinter не очень ориентирован на объект. Что я подразумеваю в том, что код, который я вижу, не в классах. На каждый их собственный, но я нахожу код GUI проще следовать в классе. Во всяком случае, то, как я закончил создать свой первый пример:

Давайте займем несколько минут, чтобы немного сломать это. У нас есть простой класс, где мы проходим в объекте «root» (TK.TK ()) как родитель верхнего уровня. Это в свою очередь используется в качестве родителя TK.Frame. пакет () Команда – одна из менеджеров геометрии, с которыми приходит Tkinter. Это позволяет вам «упаковать» виджеты в столбцы или строки и имеет различные варианты, такие как заполнение, развертывание и сторона. Далее мы создаем TK.Button и упаковать его. Если вы не вызовите Pack (или одну из других менеджеров Geometry), то ваши виджеты вообще не появятся. В процессе мгновения кнопок мы передаем его родитель, строку для его метки и команду, которая будет запускаться при нажатии кнопки.

Когда пользователь нажимает кнопку, мы создаем другое окно верхнего уровня и дайте ему другое название, размер и кнопку закрытия. Мы используем анонимный метод Lambda для создания обратного вызова, так как нам нужно пройти экземпляр другого станка для обработчика, чтобы мы могли закрыть его. Мы могли бы только создать другой мельчайший как свойство класса (I.E. Self.Otherframe) тоже и пропущены лямбда, но если вы многое с помощью TKinter, то вам действительно нужно привыкать к тому, чтобы увидеть этот вид установки обратного вызова. Когда Закрыть Кнопка вызывается, она разрушает другой мельчайший и вызывает Показать Метод, который показывает оригинальный кадр. Некоторые примеры говорят, что вам нужно позвонить в Обновление () Метод, прежде чем позвонить Deiconify () Один, однако, если вы прокомментируете вызов обновления (), вы увидите, что он отлично работает. По крайней мере, он сделал на Windows 7 с Python 2.6.

Теперь давайте попробуем расщеплять второй кадр в свой класс!

Разделение второго кадра в класс

Помещая второй кадр в свой собственный класс способствует повторному использованию кода и лучшей организации вашего кода, особенно если второй кадр должен был быть действительно сложным. Вот один из способов сделать это:

Теперь это в основном так же, как первая версия кода. Было бы действительно приятно создать кнопку второго кадра во втором классе кадра, но если мы сделаем это, то становится трудно сообщить оригинальной рамке для деконификации. Еще для полноты, давайте посмотрим, как это будет выглядеть:

Обратите внимание, что в этой версии мы должны передавать экземпляр класса MyApp на другой кадр, чтобы мы могли назвать его Показать метод. Вы также можете увидеть, что нам больше не нужна функция лямбда, поскольку нам больше не нужно проходить другой экземпляр кадров в обработчик. Это делает вещи проще. Тем не менее это хрупкий способ сделать вещи. Почему? Хорошо, если вы решите изменить метод Show основного кадра в ShowFrame Или что-нибудь еще, тогда вы должны помнить, чтобы изменить его в другом классе, или он разрывается. Это может быть утомительно очень быстро, если вы проходите экземпляры вокруг нескольких классов. К счастью, есть простое решение, и он называется Pubsub!

Использование Pubsub для общения между 2 Tkinter Windows

Вам нужно будет пойти в Pubsub Сайт И установите пакет, так как он не включен в Python. Он включен в Wxpython, хотя я не думаю, что вы действительно можете использовать эту версию за пределами WxPython. Во всяком случае, как только у вас есть, вы можете следовать вместе с этим кодом:

Как и следовало ожидать, этот код просто интегрирует материал PUBSUB. Мы создаем Слушатель Метод в нашей главной рамке, и мы «зарегистрируем» это, позвонив

«Подпись» – Кроме тогоframeClosed Отказ Поэтому, если мы публикуем сообщение с этой подписью, то основной кадр и любой другой класс, который подписался на эту подпись, позвонит соответствующим методам. В другом кадре мы добавляем PUB.SENDMessage Позвоните в конец нашего метода теста, где мы публикуем до этой вышеупомянутой подписи, и мы проходим вдоль аргумента манек. Вам не нужно делать это, но я думал, что было бы лучше, если бы вы знали, как пройти информацию между классами. Вы можете пройти почти любой объект/тип Python, который вы хотите.

Упаковка

Теперь вы немного знаете о TKinter и несколько методов его верхнего уровня. Вы можете заставить ваши рамки исчезнуть и снова появиться в команде! Вы также получили вкус мощности Pubsub. Идите и код с этими новыми знаниями!

Дополнительные ресурсы

Загрузите исходный код

  • tkinter_fraames.zip.