Как сделать диалоговое меню

Собственные диалоговые окна, класс Dialog

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

Подробную документацию по этому классу можно посмотреть на странице:

Давайте в качестве примера создадим свое простое диалоговое окно. Для этого объявим класс MyDlg, который унаследуем от Dialog:

Смотрите, мы здесь объявили свой конструктор, в который можно передавать произвольные параметры *args и именованные параметры **kwargs. Затем, вызываем конструктор базового класса, то есть, Dialog и передаем ему все те же самые параметры: *args и **kwargs. Благодаря этому мы можем через класс MyDlg создавать диалоговые окна с разной стилизацией.

Далее, в классе MyFrame создадим тулбар с двумя кнопками и вторую свяжем с вызовом диалога:

Сами обработчики будут следующими:

В обработчике onDialog мы создаем экземпляр класса MyDlg, указывая родительское окно MyFrame и заголовок title. Затем, отображаем окно как модальное с помощью метода ShowModal. Данный метод возвращает id элемента, через который произошло закрытие этого окна. И следующей строчкой мы должны вызвать метод Destroy для уничтожения окна. Иначе оно просто будет скрыто, но продолжит существовать в памяти компьютера.

При запуске этой программы увидим вот такой результат диалогового окна:

А в консоли появится значение wx.ID_CANCEL, равное 5101. Мы в этом можем легко убедиться, если запишем:

Модальные и немодальные окна

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

Для модальных окон создается свой независимый цикл обработки событий. Условно это можно изобразить так:

В нашей программе модальное окно создается благодаря вызову метода ShowModal и программа переходит на следующую строчку dlg.Destroy() только после закрытия диалога. Однако, мы можем изменить это поведение и отобразить диалоговое окно как немодальное, вызвав метод Show:

Смотрите, теперь при запуске наше окно показывается и тут же исчезает, так как программа сразу идет дальше и вызывается метод dlg.Destroy(). Давайте поставим его в комментарий и снова запустим программу. Теперь наше окно не исчезло и, кроме того, мы можем взаимодействовать и с главным окном, например, открыть еще одно диалоговое окно. Здесь уже нет отдельного цикла событий и потому интерфейс реагирует на действия пользователя.

Вот в этом основные отличия модальных и немодальных окон. Конечно, я здесь привел только пример отображения окна как немодального. По идее, в таком случае нужно контролировать их число и, например, не показывать более одного. Для этого к классе MyFrame создадим локальное свойство:

и в обработчике onDialog запишем:

То есть, прежде чем создать новое окно, мы проверяем значение свойства self.dlg и если оно равно None, то делаем вывод, что окно еще не отображено, создаем его и показываем на экране.

А в конструкторе класса MyDlg добавим обязательный параметр parent:

и сохраним его в отдельном локальном свойстве этого класса. Далее, здесь же мы должны добавить обработчик события wx.EVT_CLOSE:

а сам обработчик запишем следующим образом:

В нем мы уничтожаем окно с помощью метода Destroy и свойство dlg класса MyFrame снова устанавливаем в None.

Запустим программу, и теперь отображается только одно диалоговое окно. Конечно, это лишь пример того, как можно работать с такими немодальными окнами. Логика обработки вполне может быть и другой. Все зависит от конкретной решаемой задачи.

Отображение модального окна через менеджер контекста

Давайте вернем окно в модальный режим, запишем обработчик onDialog в виде:

В этом фрагменте программы есть один недостаток: в случае каких-либо ошибок (исключений) метод Destroy может быть не вызван и окно останется в памяти. Конечно, мы можем воспользоваться конструкцией try/except/finally, чтобы решить эту проблему и записать все вот в таком виде:

Но это не лучший способ. В Python часто при отображении модальных диалоговых окон используют менеджер контекста, который автоматически уничтожает окно (вызывает метод Destroy) после выполнения тела контекста. (Если вы не знаете что такое менеджер контекста, то вот ссылка на это занятие). В нашем случае это можно реализовать так:

Здесь в менеджере создается экземпляр окна и далее, через ссылку dlg, мы отображаем это окно как модальное. При выходе из этого менеджера диалоговое окно будет автоматически уничтожено. Мы в этом можем легко убедиться, если переопределим в классе MyDlg этот метод:

Теперь при закрытии окна увидим сообщение, что был вызван метод Destroy.

Стилизация диалоговых окон

Давайте теперь посмотрим на различные способы стилизации диалоговых окон. И для начала вызовем окно со стандартными стилями:

Далее, уберем стиль wx.CLOSE_BOX:

и смотрите, кнопка закрытия окна неактивна, окно можно закрыть лишь комбинацией клавиш Alt+F4.

Если убрать все стили:

то получим окно в виде вот такого полотна. Его также можно закрыть комбинацией клавиш Alt+F4.

Добавим туда wx.CAPTION, wx.CLOSE_BOX и еще wx.RESIZE_BORDER:

Теперь наше окно можно менять в размерах. И так далее, комбинируя стили различным образом можно получать окна с разными свойствами.

Стандартные элементы управления

Давайте разместим в нашем окне текстовое поле ввода и две кнопки «Да» и «Отмена». Класс MyDlg можно представить так:

и реализовать его в следующем виде:

Смотрите, мы здесь вызываем метод EndModal класса Dialog, который завершает цикл выполнения диалогового окна и определяет возвращаемое значение в виде константы ID_OK. И, затем, переменная res в обработчике onDialog будет принимать это значение. То есть, мы можем сделать такую проверку:

Но это не лучший подход к обработке стандартных элементов управления в диалогах. Гораздо проще и удобнее у кнопки bOk прописать этот стандартный id:

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

В результате у нас будут две кнопки со стандартным поведением.

Вот так создаются свои собственные диалоговые окна в wxPython.

Видео по теме

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

wxPython #1: обзор модулей для GUI и порядок установки wxPython

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

wxPython #2: общая структура интерфейса

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

wxPython #4: контекстное меню и панель инструментов (toolbar)

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

wxPython #5: схемы (layout) размещения виджетов, BoxSizer

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

wxPython #8: примеры событий, назначение id виджетам

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

wxPython #9: стандартные диалоговые окна

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

wxPython #10: пользовательские диалоговые окна, класс Dialog

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

wxPython #14: графические примитивы, система координат, единицы измерений

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

wxPython #15: регионы (wx.Region) и операции с ними

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

wxPython #17: демонстрация программы wxFormBuilder

© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта

Источник

Работа с меню и диалоговыми окнами

Свойства и функции системных часов

Чтобы получить от системных часов информацию о времени, можно использовать их различные свойства и функции. Информация о времени может потребоваться в программах при создании собственных календарей, часов или оповещений. В следующей таблице содержится перечень наиболее полезных функций системных часов. За дополнительной информацией обращайтесь к справочной системе Visual Studio.

Использование элементов управления для диалоговых окон

Название элемента управленияНазначение
OpenFileDialogПолучает названия диска, папки и файла для существующего файла.
SaveFile (Файл) DialogПолучает названия диска, папки и файла для нового файла.
FontDialogПозволяет выбрать новый шрифт и его стиль.
ColorDialogПозволяет выбрать цвет из палитры.
PrintDialogПозволяет задать параметры печати.
PrintPreviewDialogОтображает диалоговое окно предварительного просмотра материала для печати, так, как это делает Microsoft Word.
PageSetupDialogПозволяет управлять параметрами страницы: полями, размером бумаги и ее ориентацией.

Добавление элементов управления OpenFileDialog и ColorDialog

Если вы не создавали проект Menu, в меню File (Файл) выберите Open (Открыть), затем Project (Проект), в папке c:\vbnet03sbs\Гл.4\menu выберите файл проекта Menu.vbproj, а затем нажмите кнопку Open (Открыть). Если форма не видна, дважды щелкните мышью в Solution Explorer (Обозревателе решений) на Form1.vb.

Совет. Если вы не видите OpenFileDialog в области элементов, то он может быть за пределами видимости. Чтобы промотать список в области элементов, щелкните на нижней стрелке прокрутки, находящейся рядом с закладкой Clipboard Ring (Буфер обмена).

В области компонентов появится объект диалогового окна для открытия файла.

Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

Как и объект главного меню, объекты с диалогами открытия файла и выбора цвета можно настроить, задав их свойства.

Теперь с помощью элемента управления PictureBox создайте область для показа изображений. Этот объект показывает в поле формы содержимое из файлов изображений. На этот раз мы выведем на поле формы картинку, используя диалоговое окно для открытия файла.

Добавление объекта области показа изображения

Теперь с помощью Menu Designer (Конструктора меню) добавьте в вашу программу меню File (Файл).

Добавление меню File (Файл)

Чтобы передвинуть меню Файл на первое место, просто перетащите его на меню Дата. В Menu Designer (Конструкторе меню) целые меню можно перемещать точно так же, как и отдельные команды внутри меню. Имеет смысл сделать меню Файл первым меню программы. Ваша форма должна выглядеть примерно так.

Источник

Глава 4 Контекстное меню и диалоговые окна

Глава 4 Контекстное меню и диалоговые окна

В предыдущих главах говорилось о том, как управлять окнами, запускать программы, создавать, сохранять и редактировать документы. В этой главе речь пойдет о контекстных меню и диалоговых окнах. Эти элементы интерфейса операционной системы Windows позволяют существенно упростить и ускорить работу.

• Работа с диалоговыми окнами

• Использование контекстного меню

Работа с диалоговыми окнами

Для успешной работы в программах-приложениях надо уметь пользоваться диалоговыми окнами.

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

В диалоговых окнах могут использоваться разнообразные элементы управления. С некоторыми из них вы уже познакомились при сохранении документа в программе Блокнот. Условно все элементы управления диалоговых окон можно разделить на несколько типов (табл. 4.1).

Все перечисленные элементы управления диалоговых окон показаны на рис. 4.1.

Таблица 4.1. Основные элементы управления диалоговых окон

Рис. 4.1. Основные элементы диалоговых окон

Далее вы познакомитесь с диалоговыми окнами, предназначенными для настройки рабочего стола, панели задач и панели управления. При работе с программами Word, Excel, «1С: Предприятие» мы также будем пользоваться диалоговыми окнами.

Использование контекстного меню

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

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

Приведем примеры использования контекстного меню для некоторых объектов.

Изменение свойств ярлыка

С помощью контекстного меню можно изменять свойства ярлыка:

1. Щелкните на ярлыке папки Бухгалтерия правой кнопкой мыши и выберите команду Свойства. Откроется окно Свойства: Бухгалтерия (рис. 4.2).

Рис. 4.2. Настройка свойств ярлыка

2. В поле Рабочая папка указана папка, в которой находится файл, соответствующий данному ярлыку.

3. Кнопка Сменить значок позволяет найти для ярлыка другой значок.

4. Чтобы сохранить изменения, щелкните на кнопке ОК.

Настройка рабочего стола

Для изменения внешнего вида рабочего стола также удобно использовать контекстное меню.

Щелкните правой кнопкой мыши в любом свободном месте рабочего стола. Команда Свойства контекстного меню откроет диалоговое окно Свойства: Экран, в котором можно изменить оформление и другие свойства рабочего стола.

Данный текст является ознакомительным фрагментом.

Продолжение на ЛитРес

Читайте также

Диалоговые окна

Диалоговые окна Структура диалоговых окон несколько отличается от структуры программных окон. В них отсутствует строка меню, панель инструментов, строка состояния, из кнопок управления окном в заголовке есть только кнопка Закрыть. Название диалогового окна чаще всего

Контекстное меню

Контекстное меню Контекстное меню – это меню, которое появляется при щелчке правой кнопкой мыши на любом из объектов Windows. Из самого названия меню следует, что его содержание зависит от того, на каком объекте был выполнен щелчок.Контекстное меню содержит команды,

Другие диалоговые окна

Другие диалоговые окна В Windows XP присутствуют не только диалоговые окна и мастера для работы с сетью — есть и много других диалоговых окон, некоторые стоят того, чтобы их рассмотреть. Например, существует возможность открытия диалогового окна Сертификаты,

Динамические диалоговые окна

6.1. Встроенные диалоговые окна

6.1. Встроенные диалоговые окна Диалоговые окнаВ VBA существуют две возможности создания диалоговых окон, позволяющих вести интерактивный диалог с пользователями.Окно сообщений MsgBox выводит простейшие сообщения для пользователя, а окно ввода InputBox обеспечивает ввод

Контекстное меню

Стандартные диалоговые окна

Диалоговые окна

2.4. Стандартные диалоговые окна Windows

2.4. Стандартные диалоговые окна Windows Теперь рассмотрим, как можно только при помощи функций Windows API вызывать некоторые распространенные диалоговые окна. Чтобы использовать API-функции и структуры с информацией для этих диалоговых окон, необходимо подключить следующие

Контекстное меню

Контекстное меню Для выбора пунктов меню и пиктограмм на панели инструментов часто используется устройство указания – мышь. При работе с мышью нажатие левой кнопки в области рисования обычно применяется для выбора и указания точки на экране; щелчок правой кнопкой мыши

Контекстное меню пункта меню Пуск

Контекстное меню пункта меню Пуск С помощью системного реестра можно запретить вызов контекстного меню, открываемого щелчком правой кнопкой мыши на пункте меню Пуск (рис. 2.23). Для этого необходимо в разделе HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer создать REG_DWORD-параметр

Диалоговые окна

Диалоговые окна В диалоговых окнах обычно выводится код ошибки и ее краткое описание (рис. 6.1). Далеко не всегда короткого описания хватает, чтобы понять, что же случилось, и устранить причину ошибки. А иногда описание непонятно, потому что оно на английском (в англоязычных

Контекстное меню

Контекстное меню В современных операционных системах есть еще один тип меню, применяемый повсеместно. Это контекстное меню. Вызвать его можно, щелкнув правой кнопкой мыши на определенном элементе.Например, если вы подведете указатель к текстовому полю и щелкнете правой

Урок 1.3. Контекстное меню и диалоговые окна

Урок 1.3. Контекстное меню и диалоговые окна Контекстное меню Контекстное меню вызывается щелчком правой кнопки мыши на каком-либо объекте. В нем расположен список часто используемых команд для конкретного объекта. Для примера щелкните правой кнопкой мыши на Рабочем

Диалоговые окна

Диалоговые окна Кроме окон программ и папок, пользователям Windows часто приходится иметь дело с различными диалоговыми окнами, которые служат для взаимодействия пользователя с операционной системой и прикладными программами. С их помощью можно изменять параметры работы

Источник

Диалоговое окно Android с «иконифицированным» меню

Некоторое время назад меня увлекла идея разработки приложений под платформу Android. Дабы не заниматься изучением платформы на простых hello-world программках решил сделать что-то такое, что позволило бы освоиться с UI частью фреймворка, работой с БД, сетью и социальными сервисами.
Идея была придумана до одурения простая и я бы даже сказал, тупая. И вот когда я начал что-то делать то тут резко захотелось мне сделать красивое диалоговое окно с выбором пункта меню с иконками. Такой диалог присутствует в стандартном Андроиде, например, долгий тап на рабочем столе открывает диалог выбора добавляемого контента (виджет, обоины и т.д.). Итак, добро пожаловать под кат…

Список (провайдер) возможных типов аккаунтов

Это простая обертка вокруг списка возможных типов аккаунтов. Тип аккаунта здесь простой POJO класс, который состоит из идентификатора (константа), названия сервиса и идентификатора ресурса иконки для данного типа сервиса.

ListAdapter для отображения списка типов аккаунтов в заданном layout’е

Для начала нужно передать в конструктор список типов, с которым будет работать адаптер списка. Привязка конкретного item’а к лэйауту происходит в переопределенном методе getView(). В нем загружается лэйаут из указанного ресурса, извлекаются виджеты и в них записываются данные об конкретном элементе списка. Кстати, индекс этого элемента автоматически доступен через параметр position.

Данный лист-адаптер работает с таким вот лэйаутом

Все, что теперь осталось — это привязать разработанный лист-адаптер к конкретному диалоговому окну

и вызвать в нужном месте activity диалог

Диалог после своего завершения вернет индекс выбранного item’а параметром selectedItemId в листенер, который указан при вызове диалога. В данном простом случае этот индекс будет совпадать с ID типа аккаунта (item’а в списке), поэтому никаких дополнительных преобразований или извлечений не требуется. Для моей задачи этого индекса более чем достаточно.

В итоге у меня получился такой вот симпатичный диалог
Как сделать диалоговое меню. Смотреть фото Как сделать диалоговое меню. Смотреть картинку Как сделать диалоговое меню. Картинка про Как сделать диалоговое меню. Фото Как сделать диалоговое меню

Может я в данном топике просто описал прописные истины, может нет. Решать, как говорится, Вам, Хабраюзеры…

Спасибо и удачи всем в увлекательном процессе разработки под Android-платформу 😉

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *