Меню конструктор: бесплатный конструктор меню для кафе

Содержание

Конструктор меню — База знаний uCoz

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

Меню сайта — один из основных функциональных элементов, состоящий из набора ссылок на ключевые страницы. По умолчанию в него входят ссылки на активные модули и стандартные страницы («Информация о сайте», «Обратная связь»). Конструктор меню позволяет изменить набор ссылок без редактирования HTML-кода шаблонов сразу для всех страниц сайта.

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

Вы можете создавать до 10 различных меню в рамках одного сайта.

Данная инструкция состоит из следующих шагов:

  1. Как узнать, используется ли конструктор меню на моем сайте?
  2. Редактирование меню
  3. Создание и размещение нового меню на сайте
  4. Адреса модулей системы

Как узнать, используется ли конструктор меню на моем сайте?

За отображение меню отвечают переменные вида $NMENU_n$. Подобные переменные встроены во все стандартные шаблоны.

В других случаях в панели управления нужно перейти в «Дизайн» / «Редактор» / «Глобальные блоки» и найти переменную в коде шаблона «Верхняя часть сайта»:

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

Если вы разрабатываете свой шаблон, то включайте переменные меню в HTML-код. Когда покупаете шаблон в магазине или заказываете его разработку у фрилансеров, уточняйте, будет ли в шаблон встроен конструктор меню.

Редактирование меню

Чтобы отредактировать меню, перейдите в панель управления, откройте раздел «Дизайн» / «Конструктор меню»:

Выберите меню, которое хотите отредактировать:

Слева от названия меню нажмите на «Изменить параметры меню»:

Появится окно редактирования меню:

  1. Название меню. Отображается только в панели управления и помогает администратору отличить одно меню от другого.
  2. Ориентация меню. В зависимости от выбранного значения к меню будут применены разные стили оформления — горизонтальный или вертикальный.
  3. Удалить. Полностью удаляет меню.

Когда закончите редактирование, нажмите на ссылку «Готово».

Изменить порядок пунктов в меню можно, перетащив его за точки с левой стороны от формы:

Чтобы изменить пункт, наведите на него курсор мыши и нажмите «Изменить»:

Появится окно редактирования пункта меню:

  1. Название пункта. Отображается в списке пунктов меню, например, «Главная страница».
  2. URL-адрес. Будет открываться при нажатии на пункт меню.
  3. «Открывать в новом окне» добавляет атрибут target=”_blank” к ссылке.
  4. CSS-класс предназначен для индивидуального оформления. Используйте его, когда нужно выделить один или несколько пунктов меню.
  5. Удалить пункт меню.

Когда закончите редактирование пункта меню, нажмите на ссылку «Готово».

Для добавления пункта меню нажмите на изображение «+»:

и повторите действия по редактированию меню, которые мы рассмотрели ранее.

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

Чтобы внесенные изменения вступили в силу и отобразились на сайте, нажмите на кнопку «Сохранить»:

Создание и размещение нового меню на сайте

Чтобы создать новое меню, в панели управления откройте раздел «Дизайн» / «Конструктор меню» и нажмите на кнопку «Добавить»:

Появится новое меню:

Настройте меню, используя второй шаг данной инструкции.

Скопируйте переменную, которая отвечает за отображение меню в шаблоне (в нашем примере это

$NMENU_2$).

В панели управления откройте раздел «Дизайн» / «Редактор» и найдите в меню слева «Глобальные блоки»:

Затем выполните следующие действия:

  1. Выберите подходящий глобальный блок для размещения меню
  2. Добавьте код в шаблон глобального блока
  3. Нажмите на кнопку «Сохранить»

Меню появится на сайте.

Другой способ разместить меню на сайте, включив конструктор из панели инструментов сайта, — отредактировать HTML-код глобального блока:

Адреса модулей системы

В этом разделе приведена информация об адресах модулей системы, которая поможет указать корректные ссылки на них:

МодульОтносительная ссылкаПример абсолютной ссылки
Новости/news///example.com/news/
Блог/blog///example.com/blog/
Каталог сайтов/dir///example.com/dir/
Каталог статей/publ///example.com/publ/
Каталог файлов/load///example.com/load/
Доска объявлений/board///example.com/board/
FAQ/faq///example.com/faq/
Интернет-магазин/shop///example.com/shop/
Тесты/tests///example.com/tests/
Видео/video///example.com/video/
Форум/forum///example.com/forum/
Фотоальбомы/photo///example.com/photo/
Онлайн-игры/stuff///example.com/stuff/
Гостевая книга/gb///example.com/gb/

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

Обзор PEP — конструктор меню и гид по правильному питанию

iPhone | 15.3 МБ | бесплатно | СКАЧАТЬ в App Store

Правильное питание — это тема одинаково актуальная как для мужчин, так и для женщин. Однако, если говорить о приложениях именно женских, то программа для построения здорового рациона в данном списке должна присутствовать обязательно. И одним из примеров таких программ является PEP.

Что представляет собой PEP?

Главная цель, которую ставит перед собой приложение — помочь пользователю питаться правильно. Ничего вредного, ненатурального, жаренного. Максимально сбалансированное соотношение жиров, белков и углеводов. Количество калорий исключительно в пределах нормы. Питание разнообразное, что гарантирует полное насыщение организма необходимыми витаминами и микроэлементами. Как результат — оптимальная фигура, отличное самочувствие и хорошее настроение.

 

Потому вполне логично, что в память программы можно вносить свои данные — рост, вес, возраст. Кроме того, следует указать также и то, какого результата вы хотите добиться — похудеть, набрать вес или оставаться в прежней форме. В зависимости от выбранной задачи PEP будет предлагать вам соответствующие варианты питания.

 

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

 

Во вкладке «Магазин» содержится список тех продуктов, которые необходимы для приготовления соответствующих блюд. Достаточно этот список чуть откорректировать и можно смело отправляться за продуктами.

 

Ну а вот вкладка «Профиль» позволяет внести новые параметры собственного веса, а также те продукты, которые были съедены в течении дня помимо запланированных программой. Тут же идет подсчет калорий, белков, жиров и углеводов. Все представлено в виде наглядных таблиц, чтобы они могли произвести соответствующее впечатление на пользователя. Особенно, если стрелки графиков уходят далеко за линию с подписью «Норма».

Недостатки программы

Практически все описанное выше можно отнести к положительным свойствам приложения. Но нужно поговорить и его отрицательных сторонах. И главная из них — ряд функций недоступны без покупки премиум-подписки. К таким функциям относится возможность просматривать меню и список покупок на завтра. А точнее — открывается данная информация только в 22.00 предыдущего дня. Также нельзя добавлять рецепты в избранное и выбирать среди нескольких рецептов для завтрака наиболее подходящий. Теоретически не критично, но всё же.

Стоит премиум-подписка $9.99 в месяц. Кстати, она включает в себя 7 дней бесплатного пробного периода. А этого вполне достаточно для того, чтобы понять, нужно ли платить за пользование программой деньги или нет. Ведь кого-то, возможно, и без покупки подписки приложение будет вполне устраивать.

Еще лично мне не понравилось то, что нельзя задать больше трех приемов пищи в день. А еще нет возможности вносить в список покупок собственные позиции.


Нужно признаться, что PEP реализована достаточно хорошо. Рецепты подобраны грамотно, интерфейс приятный, управление удобное и даже базовые возможности вполне могут пригодиться. Все так же расстраивает ценник подписки, но платить или не платить — выбор каждого отдельного пользователя. В любом случае, если вам основы правильного питания интересны, то и программа эта лишней не будет.


PEP: Индивидуальное меню на день.

Разработчик: Oleg Kapitonov
Версия: 1.1.1
iPhone (15.3 МБ) — бесплатно [Скачать в App Store]


Режим правильного питания вне тренировок: Конструктор меню

4 февраля L’Officiel Online запустили новый проект «Утро с Аллой Григорьевой» — авторские тренировки в домашних условиях, которые будут выходить три раза в неделю в течение 3-х месяцев. Помимо спорта основой проекта стала также система правильного питания, которую специально разработала диетолог Анна Крисс.

По мнению Анны, диета — это не лучший способ похудеть, потому что все сброшенные килограммы могут очень быстро вернуться назад. Наиболее эффективный способ держать тело в здоровом тонусе — это правильное питание. И самое важное — количество потребляемой пищи. «Все привыкли, что полезными могут быть только листья и куриная грудка. Но здоровым должно быть количество, а результат будет зависеть не от того, что вы съели, а сколько вы съели. У меня нет запретов, только если у вас нет противопоказаний. У нас в жизни и так много стресса», — комментирует Анна.

Полезные рецепты во время тренировок будут сопровождать каждый видеоматериал. Но как питаться вне тренировок? Для этого Анна Крисс составила специальный «конструктор» — каждый день можно самому себе составлять меню на полезный для организма завтрак, обед и ужин. Крисс также предусмотрела вариант для тех, кто не ест мясо и рыбу.

Меню с рыбой и мясом

Завтрак:
1. Каша овсяная с фруктами и орехами
2. Омлет с ветчиной и сыром
3. Смузи с семенами чиа
4. Сырники, сметана
5. Запеканка творожная с фруктами
6. Яичница с ветчиной, овощная нарезка
7. Творог, йогурт

Обед:
1. Суп овощной, филе запеченное из курицы, салат из капусты белокочанной, огурцов со сметаной

2. Бульон, стейк из говядины, салат из свежих овощей с оливковым маслом 
3. Суп грибной, котлеты куриные, овощи тушеные
4. Суп-пюре грибной, телятина тушеная, салат из печеных овощей
5. Курица тушеная, капуста тушеная
6. Семга запеченная, салат из капусты пекинской, огурцов, помидоров
7. Говядина запеченная, овощи запеченные

Ужин:
1. Креветки гриль, рис с овощами
2. Куриное филе на гриле, салат из свежих овощей
3. Грудка индейки запеченная, овощи тушеные
4. Бефстроганов из говядины, салат из капусты белокочанной, огурцов с растительным маслом
5. Грудка куриная, тушенная в сметане, салат из листьев салата, огурцов, помидоров
6. Лосось запеченный (220 г), овощи запеченные

7. Стейк из говядины, салат микс овощной

Перекус:
1. Кефир, фрукты
2. Йогурт, фрукты
3. Сыр
4. Кефир, смесь орехов
5. Фрукты
6. Мармелад
7. Сухофрукты, йогурт

Меню без рыбы и мяса

Завтрак:
1. Салат из фруктов с медом и орехами, йогурт с семенами чиа
2. Творог, мед
3. Каша рисовая с курагой
4. Каша овсяная с яблоками
5. Каша рисовая с джемом
6. Паста с сыром, овощной салат, фреш грейпфрутовый
7. Салат с сыром и овощами, фреш грейпфрутовый
8. Брускетта с печеным перцем и базиликом, сыр
9. Гранола, фрукты
10. Каша гречневая с зеленью и овощами

Обед:
1. Паста с сыром, овощи на гриле
2. Запеченный картофель, овощной салат
3. Чечевица отварная, салат греческий
4. Рис с овощами, микс-салат с помидорами черри и зеленью
5. Фасоль, тушенная в томате с паприкой, гуляш грибной
6. Макароны, запеченные с грецким орехом (200 г), салат из свежих овощей
7. Цветная капуста, запеченная с сыром, лаваш
8.  Морковные котлеты, салат из свежих овощей
9.  Фасоль, тушенная с овощами, рис отварной
10. Каша пшеничная с грибами, капуста тушеная

Ужин:
1. Суп грибной, паста с сыром, салат из свежих овощей
2. Суп овощной, паста с сыром и овощами
3. Суп-пюре овощной, лазанья с сыром и овощами 

4. Суп фасолевый, каша гречневая с грибами и зеленью, салат из помидоров, огурцов и зелени
5. Венгерский суп из лесных грибов, лазанья овощная
6. Овощной суп из зеленой фасоли, лаваш
7. Суп из цветной капусты, фасоль, тушенная с овощами
8. Суп гороховый, перец, фаршированный овощами 
9. Суп с брокколи, салат с сыром, спаржей и помидорами
10. Суп гречневый с грибами, помидоры, фаршированные сыром и рисом

Перекус:
1. Фрукты 
2. Пастила 
3. Сухофрукты
4. Смесь орехов
5. Конфеты 
6. Салат фруктовый 
7. Зефир
8. Черный шоколад 
9. Фрукты, смесь орехов
10. Фрукты, мед

Смотрите также: День 1-й: «Утро с Аллой Григорьевой»

Калькулятор меню онлайн. Конструктор банкетного меню-расчет.

При планировании торжества необходимо учесть и запланировать много нюансов и расчет банкетного меню – одна из довольно щепетильных задач. «Шувалоff Holidays» помогает своим гостям не только в оформлении и проведении мероприятий, но и предоставляет онлайн калькулятор меню для быстрого и точного расчета блюд. С помощью нашего конструктора меню можно рационально посчитать количество еды и напитков на банкет. В удобной форме для заполнения из всего многообразия вам достаточно просто выбрать понравившиеся блюда и просто указать, на какое количество человек их нужно приготовить.                                                                    



   ПРИМЕРЫ МЕНЮ


      пример меню 2969руб/1046гр/1.5л

      пример меню 3535руб/1100гр/1.7л

      пример меню 3950руб/1296гр/1.6л

Что нужно знать при составлении меню для банкета?


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

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

Верный расчет банкетного меню

Чтобы никто из ваших гостей не остался в итоге голодным, стоит учесть, что для банкета длительностью 5-8 часов необходимо заказать в среднем 1100-1300 г еды для каждого человека.

Еще один важный момент — ассортимент. При составлении банкетного меню следует выбрать в среднем: 3-5 позиций холодных закусок, 2-4 позиции салатов, 1-2 позиции горячих блюд, 0.5-1л безалкогольных напитков.

Стоимость банкетного меню зависит от стоимости каждой выбранной вами позиции.

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

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

  • Крепкий алкоголь –  для 4-х человек хватит 1 бутылки;
  • Вино –  1 бутылка на 1-2 гостей;
  • Шампанское – на 3 гостей достаточно 1 бутылки;

 

Как добавить блок «Меню» в конструкторе UniSender

В новом конструкторе можно добавить меню — блок для навигации по разделам сайта. Как и на сайте, меню в письме можно сделать адаптивным. На десктопе пункты меню будут отображаться в горизонтальный ряд, а на телефоне — вертикально, в столбце.

Вот так это выглядит в письме:

Меню в десктопной версии

Меню в мобильной версии

Мы покажем, как создать две версии меню.

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

Версия для ПК

Переходим на вкладку «Строки» и перетаскиваем строку в письмо.

Теперь идём на вкладку «Содержимое» и перетаскиваем оттуда в строку блок «Меню».

Чтобы создать пункт меню, выделяем добавленное меню в письме и на панели слева нажимаем «Добавить новый элемент».

Вводим текст пункта меню, URL и заголовок. В поле «Тип ссылки» оставляем «Открыть ссылку», а в выпадающем списке напротив «Цель» выбираем «Новая вкладка».

Таким же образом добавляем ещё три пункта меню.

Теперь переходим к настройкам внешнего вида меню. Выделяем блок с меню в письме, на вкладке «Свойства блока» листаем вниз и указываем свойства:

  • Шрифт.
  • Размер шрифта.
  • Цвет текста.
  • Цвет ссылки. Так как все пункты меню — это ссылки, их цвет мы указываем здесь.
  • Выравнивание. Можно выровнять по левому краю, по правому или по центру.
  • Ориентация. Для десктопной версии выберем «Горизонтальная» — пункты меню в один ряд.
  • Разделитель. Тут указываем «|». Можно указать другой или оставить поле пустым. Цвет разделителя мы задаём в пункте «Цвет текста».

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

Мобильная версия

Добавляем в письмо ещё одну строку и блок «Меню» внутри неё. Теперь в редакторе у нас два блока с меню, но это нормально. Каждый из блоков будет отображаться только на своём устройстве, они не будет отображаться вместе.

Выделяем добавленный блок. На панели слева с помощью кнопки «Добавить новый элемент» добавляем те же пункты, что и в версии меню для ПК.

Далее прописываем свойства.

Здесь в поле «Ориентация» выбираем «Вертикальная» — пункты меню разместятся в один столбец.

Далее включаем «Сворачивающееся меню» (ещё его называют «Гамбургер»). Это иконка, которая будет появляться вместо меню. По нажатию на иконку меню будет раскрываться и сворачиваться. Указываем свойства:

  • Размер иконки.
  • Тип иконки. «Normal» — иконка в виде квадрата, «rounded» — круглая иконка.
  • Цвет переднего плана. Здесь задаём цвет горизонтальных линий в иконке и текста в развёрнутом меню.
  • Цвет фона. Здесь — цвет фона иконки и развёрнутого меню.

Скрываем меню на ПК.

Отображение меню на разных устройствах

Предпросмотр в редакторе

В левом верхнем углу выбираем «Действия» → «Предпросмотр».

Так письмо выглядит в версии для ПК.

Так — в версии для мобильных.

Иконка гамбургер-меню

Важно!

Иконка для сворачивания меню может отображаться не на всех мобильных телефонах. Это зависит от модели телефона, операционной системы, приложения, в котором вы просматриваете письмо. Лучше всего этот функционал поддерживают устройства Apple (iPhone, iPad).

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

Так выглядит письмо в стандартном приложении «Почта» на iOS, iPhone XR.

Иконка «гамбургер-меню» работает

А вот так — в приложении «Gmail» на Android, Xiaomi Redmi 5.

Здесь нет иконки «гамбургер-меню». Пункты меню просто отображаются в столбце

Полезные ссылки

Видео «Как сделать простое письмо в конструкторе UniSender»
Как попасть в новый конструктор
Как работает
Как настроить шрифты и цвета шаблона
Как собрать макет
Как отредактировать текст
Как вставить картинку
Как вставить кнопку
Как вставить соцсети
Как вставить видео
Как вставить GIF
Как сделать прехедер
Как посмотреть письмо перед отправкой
Как сохранить письмо в виде шаблона
Как создать письмо на основе шаблона

Составляем меню-конструктор. Как грамотно покупать продукты онлайн | Продукты и напитки | Кухня

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

Планирование

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

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

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

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

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

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

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

Конструктор

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

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

Акции

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

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

Правильный выбор

Очень важно во время выбора продуктов не пожалеть времени на чтение этикеток. Так вы сможете заказать действительно качественные продукты и полуфабрикаты.

После доставки продуктов внимательно проверьте целостность всех упаковок (правда, овощи и фрукты должны быть упакованы в пакеты с отверстиями, чтобы не скапливался конденсат) и сроки годности. Продукты с нарушенными, поврежденными упаковками и вышедшим сроком годности нужно вернуть курьеру. Если не успели, не заметили, не берет — продукт фотографируете и отправляете жалобу в Роспотребнадзор. Можно и в соцсетях выложить со ссылкой на магазин. Это быстро приводит в чувство недобросовестных продавцов.

Еще очень важно смотреть на объем и вес продукта. В реальных магазинах вы сразу оцениваете, что покупаете, а в онлайн-покупках бывает так, что продукта оказывается меньше или гораздо больше, чем вы планировали. В результате приходится где-то докупать или же продукт не используется и валяется в шкафу или холодильнике.

Онлайн не отменит оффлайн

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

В то же время доставка удобна для упакованных, фасованных продуктов от известных вам производителей. Удаленно можно купить расфасованную и замороженную рыбу, фасованное мясо в вакууме от того производителя, которого вы уже проверили и знаете его товар. Также можно купить фрукты и овощи, которые не помнутся и не испортятся во время фасовки или доставки: морковь, яблоки.

Запас должен быть

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

QR меню ресторана — Бесконтактное меню для ресторанов

Создание доступного по QR-коду бесконтактного меню для ресторанов

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

Что такое QR-меню или меню по QR коду?

Что представляет собой электронное меню для ресторана? Это наклейка с QR-кодом (пиксельным черно-белым штрих-кодом со ссылкой на ассортимент блюд), которая крепится на стол или в другой зоне, доступной всем посетителям. Гость, пользуясь собственным смартфоном, считывает код и в результате видит на экране ассортимент блюд ресторана. Это быстро, просто и абсолютно безопасно для обеих сторон (и гостя, и персонала заведения), а также практически не требует финансовых вложений. Ведь бесконтактное цифровое QR-меню можно создать самостоятельно с помощью специального бесплатного конструктора меню ресторана на нашем сайте!

Бумажные листы, на которых отображается перечень блюд заведения, часто портятся, изнашиваются, на них проливают напитки и еду. Физическое меню для ресторана нуждается в регулярном обновлении, по меньшей мере, каждый сезон. Затраты на него могут достигать тысячи долларов в год, учитывая работу фуд-фотографа и дизайнера.

Электронное QR-меню в ресторан от сервиса Stravopys избавит вас от лишних хлопот и сделает представителем трендового эко-движения в своей сфере, ведь вы максимально откажетесь от использования бумаги и пластика. Сервис ориентирован на рестораторов и администраторов заведений общественного питания, то есть разработан с учетом ваших потребностей.

Как создать электронное меню?

Вы можете оформить его всего за несколько шагов. Необходимо зарегистрироваться на сайте, добавить информацию о своем заведении, создать категории и подкатегории блюд и напитков, далее создать позиции меню с изображениями, описанием (рекомендуем указать состав детально) и ценами. Далее загружаете QR-код, по которому и будет доступно онлайн меню ресторана. И все это бесплатно!

QR-меню позволяет демонстрировать ассортимент блюд гостям бесконтактно, в комфортной для них форме. Благодаря генератору QR-кода для моментального подключения к Wi-Fi посетителям больше не придется вводить пароль к точке доступа в заведении, а сориентироваться и выбрать понравившуюся позицию поможет список любимых блюд. В свою очередь, рестораторам будет полезен просмотр статистики, что поможет скорректировать меню или придумать акционное предложение.

Меню от Stravopys красивое, легко персонализируется под потребности конкретного заведения (добавляется логотип, обложка и контакты), адаптивный дизайн позволяет в любой момент добавить новые позиции или скрыть неактуальные. Расширенный функционал платной версии позволит добавить блюдо дня или страницу мероприятия для заведения.

Преимущества сервиса Stravopys таковы:

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

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

Воспользуйтесь сервисом Stravopys, чтобы создать бесконтактное меню для кафе, ресторана, бара и порадовать своих гостей заботой и отменным сервисом!

Генерация кода — CLion

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

Меню «Создать» помогает быстро создавать в коде стандартные конструкции кода. В зависимости от текущего контекста, позиции курсора или выбранного кода CLion дает вам список конструкций, которые необходимо сгенерировать.

Вызов всплывающего окна «Создание»

Используйте один из следующих вариантов:

Создание конструкторов

  1. Выберите конструктор из всплывающего окна «Создать».

  2. Если класс содержит поля, выберите поля для инициализации:

  3. Если установлен флажок «Создать на месте», конструктор шаблона будет сгенерирован в общедоступной области класса , в противном случае код будет помещен в соответствующий файл cpp.

Сгенерировать геттеры и сеттеры

  1. Выберите геттер, сеттер или геттер и сеттер во всплывающем окне «Создать».

  2. Выберите поля для создания геттеров / сеттеров для:

  3. Если установлен флажок «Создать на месте», геттеры / сеттеры будут сгенерированы в общедоступной области класса , в противном случае код будет быть помещенным в соответствующий файл cpp.

Создать операторы равенства

Это действие создает функции operator == и operator! = , которые будут использовать выбранные поля для сравнения объектов текущего класса.

  1. Выберите «Операторы равенства» во всплывающем окне «Создать».

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

  3. Если установлен флажок «Создать на месте», функции оператора будут сгенерированы в общедоступной области класса , в противном случае код будет помещается в соответствующий файл cpp.

Создать реляционные операторы

Это действие создает функции operator <, operator> , operator <= и operator> = , которые будут использовать выбранные поля для сравнения объектов текущего класса.

  1. Выберите операторы отношения во всплывающем окне «Создать».

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

  3. Если установлен флажок «Создать на месте», функции оператора будут сгенерированы в общедоступной области класса , в противном случае код будет помещается в соответствующий файл cpp.

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

Это действие генерирует оператор вставки operator << , который будет использовать выбранные поля, чтобы определить, как генерировать вывод потока для объектов текущего класса.

  1. Выберите «Оператор вывода потока» во всплывающем окне «Создать». Выберите поля для использования.

  2. Если установлен флажок «Создать на месте», функция оператора будет сгенерирована в общедоступной области класса , в противном случае код будет помещен в соответствующий файл cpp.

Последнее изменение: 16 февраля 2021 г.

Конструктор объектов DHTMLX Docs

  
 var myMenu = новый dhtmlXMenuObject (родительский, скин); 

где

  • parent - идентификатор HTML-элемента, который будет использоваться как родительский (или сам объект)
  • скин - имя скина, необязательно (строка)

    Полный список вариантов инициализации приведен ниже.

  
 

dhtmlxLayout, dhtmlxWindow, dhtmlxAccordion и dhtmlxTabbar могут создавать меню внутри своих ячеек, используя следующий синтаксис:

  
 // прикрепить к макету
myLayout.attachMenu ();
myLayout.cells (id) .attachMenu ();
// прикрепляем к окну
myWins.window (идентификатор) .attachMenu ();
// прикрепляем к Accordion
myAcc.ячейки (id) .attachMenu ();
// прикрепляем к панели вкладок
myTabbar.cells (id) .attachMenu (); 

Меню также может быть инициализировано обозначением объекта

  
 var myMenu = new dhtmlXMenuObject ({
    родитель: "a_menu",
    image_path: "кодовая база / imgs /",
    onClick: function () {
        alert («Был нажат пункт меню»);
    }
}); 

Указание параметров инициализации

  • parent - (строка или объект), id контейнера, в котором будет инициализировано дерево, обязательно
  • image_path - (строка), путь к папке с изображениями, которая будет использоваться для иконок в дереве
  • скин - {строка} изменяет скин меню (setSkin ())
  • iconset - {string} устанавливает значки Font Awesome для меню
  • align - {строка} устанавливает выравнивание меню верхнего уровня (setAlign ())
  • auto_hide - {boolean} устанавливает значение false, чтобы предотвратить скрытие контекстного меню щелчком (setAutoHideMode ())
  • auto_show - {boolean} устанавливает значение false, чтобы предотвратить отображение контекстного меню при нажатии (setAutoShowMode ())
  • caption - {строка} устанавливает дополнительный текст верхнего уровня (в случае обычного меню) (setTopText ())
  • context - {boolean} отображает меню как контекстное (renderAsContextMenu ())
  • dynamic - {string} включает динамическую загрузку подуровней (enableDynamicLoading ())
  • icon_path - {строка} определяет URL-адрес, по которому расположены необходимые пользовательские встроенные значки (setIconsPath ())
  • open_mode - {строка} устанавливает открытый режим для меню (setOpenMode ())
  • xml - {строка}, URL-адрес файла данных xml

Указание пунктов меню

пунктов меню могут быть определены через коллекцию пунктов

  
 myMenu = новый dhtmlXMenuObject ({
    родитель: "a_menu",
    Предметы:[
        {id: "t1", текст: "Top 1", items: [
            {id: "ch2", text: "child 1"},
            {id: "ch3", text: "child 2"}
        ]}
    ]
}); 

Каждый предмет может иметь следующие атрибуты:

  • id - {строка} идентификатор пункта меню
  • текст - {строка} заголовок пункта меню
  • img - {sting} URL изображения, относящегося к пункту меню
  • disabled - {логическое} состояние выключено
  • img_disabled - URL {sting}, который будет использоваться для элемента в отключенном состоянии
Наверх

Конструктор меню начальной загрузки | Bootstrap Navbar Builder

Что это такое?

Быстро создавайте и настраивайте стандартные меню панели навигации Twitter Bootstrap 3.Хотя меню начальной загрузки уже имеют два стиля по умолчанию, меню являются важной частью дизайна веб-сайта, поэтому вы, скорее всего, настроите их. Он даже поддерживает создание раскрывающихся списков .

Начните со стиля Twitter Bootstrap по умолчанию, а затем просто добавьте элементы меню и стили, которые подойдут вашему сайту.

Некоторые функции, такие как градиент, радиус границы и значки шрифтов, могут быть недоступны в старых версиях браузеров.

Инструкции

За 2 простых шага вы можете создать тысячи различных комбинаций стилей для панелей навигации Twitter Bootstrap, а затем скопировать классы CSS в свою таблицу стилей.

  1. Добавить пункты меню
  2. Выбрать стили

Сочетания клавиш

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

Главный экран
  • CTRL + SHIFT + B , показывает вкладку Builder.
  • CTRL + SHIFT + P , показывает всплывающее окно предварительного просмотра.
  • CTRL + SHIFT + H , показывает вкладку HTML.
  • CTRL + SHIFT + C , показывает вкладку CSS.
  • CTRL + SHIFT + S , отображает вкладку выбора стилей.
  • CTRL + SHIFT + M , показывает вкладку конструктора пунктов меню.
  • CTRL + SHIFT + E , показывает вкладку «Разное».
  • CTRL + SHIFT + F , изменяет размер рабочего пространства.
  • CTRL + SHIFT + A , выбирает весь код HTML или CSS на соответствующей вкладке. Затем вы можете просто использовать обычный CTRL или CMD + C , чтобы скопировать код в свой редактор кода.
Всплывающий экран
  • CTRL + 1 , показывает размер мобильного устройства.
  • CTRL + 2 , показывает размер таблицы.
  • CTRL + 3 , показывает размер рабочего стола.
  • CTRL + 4 , показывает размер авто (полная ширина жидкости).

Brisk Table - генератор меню для ресторанов и кафе. Легко использовать.

Имя

Электронная почта

Телефон (необязательно)

Часовой пояс (UTC-12: 00) Международная линия дат Запад (UTC-11: 00) Всемирное координированное время-11 (UTC-10: 00) Алеутские острова ( UTC-10: 00) Гавайи (UTC-09: 30) Маркизские острова (UTC-09: 00) Аляска (UTC-09: 00) Всемирное координированное время-09 (UTC-07: 00) Юкон (UTC-08 : 00) Нижняя Калифорния (UTC-08: 00) Всемирное координированное время-08 (UTC-08: 00) Тихоокеанское время (США и Канада) (UTC-07: 00) Аризона (UTC-07: 00) Чиуауа, Ла-Пас, Масатлан ​​(UTC-07: 00) Горное время (США и Канада) (UTC-06: 00) Центральная Америка (UTC-06: 00) Центральное время (США и Канада) (UTC-06: 00) Остров Пасхи (UTC-06: 00) Гвадалахара, Мехико, Монтеррей (UTC-06: 00) Саскачеван (UTC-05: 00) Богота, Лима, Кито, Рио-Бранко (UTC-05: 00) Четумаль (UTC-05: 00) ) Восточное время (США и Канада) (UTC-05: 00) Гаити (UTC-05: 00) Гавана (UTC-05: 00) Индиана (восток) (UTC-05: 00) Теркс и Кайкос (UTC-04: 00) Асунсьон (UTC-04: 00) Атлантическое время (Канада) (UTC-04: 00) Каракас (UTC-04: 00) Куяба (UTC-04: 00) Джорджтаун, Ла-Пен az, Манаус, Сан-Хуан (UTC-04: 00) Сантьяго (UTC-03: 30) Ньюфаундленд (UTC-03: 00) Арагуаина (UTC-03: 00) Бразилиа (UTC-03: 00) Кайенна, Форталеза (UTC -03: 00) Город Буэнос-Айрес (UTC-03: 00) Гренландия (UTC-03: 00) Монтевидео (UTC-03: 00) Пунта-Аренас (UTC-03: 00) Сен-Пьер и Микелон (UTC-03: 00) Сальвадор (UTC-02: 00) Всемирное координированное время-02 (UTC-01: 00) Азорские острова (UTC-01: 00) Острова Кабо-Верде.(UTC) Всемирное координированное время (UTC + 00: 00) Дублин, Эдинбург, Лиссабон, Лондон (UTC + 00: 00) Монровия, Рейкьявик (UTC + 00: 00) Сан-Томе (UTC + 01: 00) Касабланка ( UTC + 01: 00) Амстердам, Берлин, Берн, Рим, Стокгольм, Вена (UTC + 01: 00) Белград, Братислава, Будапешт, Любляна, Прага (UTC + 01: 00) Брюссель, Копенгаген, Мадрид, Париж (UTC + 01:00) Сараево, Скопье, Варшава, Загреб (UTC + 01: 00) Западная Центральная Африка (UTC + 02: 00) Амман (UTC + 02: 00) Афины, Бухарест (UTC + 02: 00) Бейрут (UTC + 02:00) Каир (UTC + 02: 00) Кишинев (UTC + 02: 00) Дамаск (UTC + 02: 00) Газа, Хеврон (UTC + 02: 00) Хараре, Претория (UTC + 02: 00) Хельсинки, Киев, Рига, София, Таллинн, Вильнюс (UTC + 02: 00) Иерусалим (UTC + 02: 00) Калининград (UTC + 02: 00) Хартум (UTC + 02: 00) Триполи (UTC + 02: 00) Виндхук ( UTC + 03: 00) Багдад (UTC + 03: 00) Стамбул (UTC + 03: 00) Кувейт, Эр-Рияд (UTC + 03: 00) Минск (UTC + 03: 00) Москва, Санкт-Петербург (UTC + 03: 00 ) Найроби (UTC + 03: 30) Тегеран (UTC + 04: 00) Абу-Даби, Маскат (UTC + 04: 00) Астрахань, Ульяновск (UTC + 04: 00) Баку (UTC + 04: 00) Ижевск, Самара ( UTC + 04: 00) Порт Луис (UTC + 04: 00) Саратов (UTC + 04: 00) Тбилиси (UTC + 04: 00) Волгоград (UTC + 04: 00) Ереван (UTC + 04: 30) Кабул (UTC + 05: 00) Ашхабад, Ташкент (UTC + 05: 00) Екатеринбург (UTC + 05: 00) Исламабад, Карачи (UTC + 05: 00) Кызылорда (UTC + 05: 30) Ченнаи, Калькутта, Мумбаи, Нью-Дели (UTC + 05: 30) Шри Джаяварденепура (UTC + 05: 45) Катманду (UTC + 06: 00) Астана (UTC + 06: 00) Дакка (UTC + 06: 00) Омск (UTC + 06: 30) Янгон (Рангун) (UTC + 07: 00 ) Бангкок, Ханой, Джакарта (UTC + 07: 00) Барнаул, Горно-Алтайск (UTC + 07: 00) Ховд (UTC + 07: 00) Красноярск (UTC + 07: 00) Новосибирск (UTC + 07: 00) Томск (UTC + 08: 00) Пекин, Чунцин, САР Гонконг, Урумчи (UTC + 08: 00) Иркутск (UTC + 08: 00) Куала-Лумпур, Сингапур (UTC + 08: 00) Перт (UTC + 08: 00) Тайбэй (UTC + 08: 00) Улан-Батор (UTC + 08: 45) Евкла (UTC + 09: 00) Чита (UTC + 09: 00) Осака, Саппоро, Токио (UTC + 09: 00) Пхеньян (UTC + 09: 00) Сеул (UTC + 09: 00) Якутск (UTC + 09: 30) Аделаида (UTC + 09: 30) Дарвин (UTC + 10: 00) Брисбен (UTC + 10: 00) Канберра, Мельбурн, Сидней (UTC + 10:00) Гуам, Порт-Морсби (UTC + 10: 00) Хобарт (UTC + 10: 00) Владивосток (UTC + 10: 30) Остров Лорд-Хау (UTC + 11: 00) Остров Бугенвиль (UTC + 11: 00) Чокурдах (UTC + 11: 00) Магадан (UTC + 11: 00) Остров Норфолк (UTC + 11: 00) Сахалин (UTC + 11: 00) о. Соломона., Новая Каледония (UTC + 12: 00) Анадырь, Петропавловск-Камчатский (UTC + 12: 00) Окленд, Веллингтон (UTC + 12: 00) Всемирное координированное время + 12 (UTC + 12: 00) Фиджи (UTC + 12:45) Острова Чатем (UTC + 13: 00) Всемирное координированное время + 13 (UTC + 13: 00) Нукуалофа (UTC + 13: 00) Самоа (UTC + 14: 00) Остров Киритимати

Адрес

Веб-сайт

Выпадающие списки · Bootstrap

Переключайте контекстные наложения для отображения списков ссылок и многого другого с помощью плагина раскрывающегося списка Bootstrap.

Обзор

Выпадающие списки - это переключаемые контекстные наложения для отображения списков ссылок и многого другого.Они сделаны интерактивными с помощью встроенного плагина JavaScript для выпадающего меню Bootstrap. Они переключаются нажатием, а не наведением курсора; это намеренное дизайнерское решение.

Выпадающие списки созданы на основе сторонней библиотеки Popper.js, которая обеспечивает динамическое позиционирование и обнаружение области просмотра. Обязательно включите popper.min.js перед загрузочным JavaScript или используйте bootstrap.bundle.min.js / bootstrap.bundle.js , который содержит Popper.js. Popper.js не используется для размещения раскрывающихся списков на панели навигации, хотя динамическое позиционирование не требуется.

Если вы создаете наш JavaScript из исходного кода, ему требуется util.js .

Доступность

Стандарт WAI ARIA определяет фактический виджет role = "menu" , но это характерно для меню, подобного приложениям, которое запускает действия или функции. ARIA Меню могут содержать только пункты меню, пункты меню флажков, пункты меню радиокнопок, группы радиокнопок и подменю.

С другой стороны, выпадающие списки

Bootstrap разработаны так, чтобы быть общими и применимыми к различным ситуациям и структурам разметки.Например, можно создавать раскрывающиеся списки, содержащие дополнительные входные данные и элементы управления формами, такие как поля поиска или формы входа в систему. По этой причине Bootstrap не ожидает (и не добавляет автоматически) какие-либо атрибуты role и aria- , необходимые для истинных меню ARIA . Авторы должны сами включить эти более конкретные атрибуты.

Однако Bootstrap добавляет встроенную поддержку для большинства стандартных взаимодействий с меню клавиатуры, таких как возможность перемещаться по отдельным .dropdown-item с помощью клавиш курсора и закрыть меню с помощью клавиши ESC .

Примеры

Оберните переключатель раскрывающегося списка (ваша кнопка или ссылка) и раскрывающееся меню в .dropdown или другой элемент, который объявляет position: relative; . Выпадающие списки можно запускать из элементов или

И с элементами :

    

Самое приятное то, что вы можете сделать это и с любым вариантом кнопок:

  
  

Кнопка разделения

Аналогичным образом создайте раскрывающиеся списки с разделенными кнопками с практически такой же разметкой, что и раскрывающиеся списки с одной кнопкой, но с добавлением .dropdown-toggle-split для правильного интервала вокруг выпадающего курсора.

Мы используем этот дополнительный класс, чтобы уменьшить горизонтальное заполнение по обе стороны от каретки на 25% и удалить margin-left , который добавляется для обычных раскрывающихся списков кнопок. Эти дополнительные изменения удерживают курсор в центре разделенной кнопки и обеспечивают область нажатия более подходящего размера рядом с основной кнопкой.

Вторичный Переключить раскрывающийся список
  

Калибр

Выпадающие кнопки

работают с кнопками любого размера, включая кнопки по умолчанию и кнопки с разделенным раскрывающимся списком.

  
...
...
...
...

Проезд

Выпадение

Запуск раскрывающихся меню над элементами путем добавления .dropup к родительскому элементу.

Разделить выпадение Переключить раскрывающийся список
  

Dropright

Выпадающее меню триггера справа от элементов путем добавления .dropright родительскому элементу.

Разделить вертикальное положение Переключить Dropright
  

Капля

Запуск раскрывающихся меню слева от элементов путем добавления .dropleft родительскому элементу.

  

Раньше содержимое выпадающего меню содержало ссылки, но в версии 4 это уже не так.Теперь вы можете дополнительно использовать элементы

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

    

Активно

Добавьте .active к элементам в раскрывающемся списке, чтобы сделать их активными .

    

Отключено

Добавьте .Отключено для элементов в раскрывающемся списке до , пометить их как отключенные .

    

По умолчанию раскрывающееся меню автоматически располагается на 100% сверху и слева от своего родителя. Добавьте .dropdown-menu-right к .dropdown-menu , чтобы выровнять раскрывающееся меню по правому краю.

Внимание! Выпадающие списки размещаются благодаря Popper.js (кроме случаев, когда они содержатся в панели навигации).

  

Адаптивное выравнивание

Если вы хотите использовать адаптивное выравнивание, отключите динамическое позиционирование, добавив атрибут data-display = "static" и используйте классы адаптивных вариантов.

Чтобы выровнять вправо раскрывающееся меню с заданной точкой останова или больше, добавьте .dropdown-menu {-sm | -md | -lg | -xl} -right .

По левому краю, но по правому краю на большом экране
  

Чтобы выровнять слева раскрывающегося меню с заданной точкой останова или больше, добавьте .dropdown-menu-right и . dropdown-menu {-sm | -md | -lg | -xl} -left .

По правому краю, но по левому краю на большом экране
  

Обратите внимание, что вам не нужно добавлять атрибут data-display = "static" к раскрывающимся кнопкам на панели навигации, начиная с Popper.js не используется в навигационных панелях.

Добавьте заголовок для обозначения разделов действий в любом раскрывающемся меню.

  
Раскрывающийся заголовок
Действие Другое действие

Разделители

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

    

Текст

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

  

Пример текста, который свободно перемещается в раскрывающемся меню.

И это еще один пример текста.

Формы

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

  
<форма>
Впервые здесь? Зарегистрироваться Забыли пароль?
  <форма>
  

Параметры раскрывающегося списка

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

    

Использование

С помощью атрибутов данных или JavaScript плагин раскрывающегося списка переключает скрытый контент (раскрывающиеся меню) путем переключения .показать класс в родительском элементе списка. Атрибут data-toggle = "dropdown" используется для закрытия раскрывающихся меню на уровне приложения, поэтому рекомендуется всегда использовать его.

На устройствах с сенсорным экраном открытие раскрывающегося списка добавляет пустые ( $ .noop ) обработчики mouseover к непосредственным потомкам элемента . Этот, по общему признанию, уродливый взлом необходим для обхода причуды в делегировании событий iOS, которая в противном случае помешала бы нажатию где-либо за пределами раскрывающегося списка запускать код, закрывающий раскрывающийся список.После закрытия раскрывающегося списка эти дополнительные пустые обработчики mouseover удаляются.

Через атрибуты данных

Добавьте data-toggle = "dropdown" к ссылке или кнопке, чтобы переключить раскрывающийся список.

  
...

Через JavaScript

Вызов раскрывающихся списков с помощью JavaScript:

  $ ('.dropdown-toggle '). dropdown ()  
data-toggle = "dropdown" все еще требуется

Независимо от того, вызываете ли вы раскрывающийся список через JavaScript или вместо этого используете data-api, data-toggle = "dropdown" всегда должен присутствовать в элементе триггера раскрывающегося списка.

Опции

Параметры могут передаваться через атрибуты данных или JavaScript. Для атрибутов данных добавьте имя опции к data- , как в data-offset = "" .

Номер
Имя Тип По умолчанию Описание
смещение | строка | функция 0

Смещение раскрывающегося списка относительно цели.

Когда функция используется для определения смещения, она вызывается с объектом, содержащим данные смещения в качестве первого аргумента. Функция должна возвращать объект с такой же структурой.Узел DOM запускающего элемента передается в качестве второго аргумента.

Для получения дополнительной информации см. Документацию по смещению Popper.js.

флип логический правда Разрешить разворачивание раскрывающегося списка в случае перекрытия ссылочного элемента. Для получения дополнительной информации обратитесь к документации Popper.js.
граница строка | элемент 'scrollParent' Граница ограничения переполнения раскрывающегося меню.Принимает значения 'viewport' , 'window' , 'scrollParent' или ссылку HTMLElement (только JavaScript). Для получения дополнительной информации обратитесь к документации Popper.js preventOverflow.
ссылка строка | элемент 'переключатель' Ссылочный элемент раскрывающегося меню. Принимает значения 'toggle' , 'parent' или ссылку HTMLElement. Для получения дополнительной информации обратитесь к Попперу.js referenceObject docs.
дисплей строка динамический По умолчанию мы используем Popper.js для динамического позиционирования. Отключите это с помощью static .
popperConfig null | объект null Чтобы изменить конфигурацию Popper.js по умолчанию для Bootstrap, см. Конфигурацию Popper.js

Обратите внимание, когда для границы установлено любое значение, отличное от 'scrollParent' , стиль position: static применяется к .выпадающий контейнер .

Методы

Метод Описание
$ (). Раскрывающийся список ('переключение') Переключает раскрывающееся меню данной панели навигации или навигации с вкладками.
$ (). Раскрывающийся список ('показать') Показывает раскрывающееся меню данной панели навигации или навигации с вкладками.
$ (). Раскрывающийся список ('скрыть') Скрывает раскрывающееся меню данной панели навигации или навигации с вкладками.
$ (). Раскрывающийся список («обновление») Обновляет позицию раскрывающегося списка элемента.
$ (). Раскрывающийся список ('удалить') Уничтожает раскрывающийся список элемента.

События

Все события dropdown запускаются в родительском элементе .dropdown-menu и имеют свойство relatedTarget , значение которого является переключаемым элементом привязки. скрыть.События bs.dropdown и hidden.bs.dropdown имеют свойство clickEvent (только при исходном типе события click ), которое содержит объект события для события щелчка.

Показано
Событие Описание
показать.bs.dropdown Это событие запускается немедленно при вызове метода экземпляра шоу.
.bs.выпадающий Это событие вызывается, когда раскрывающийся список становится видимым для пользователя (ожидает завершения переходов CSS).
hide.bs.dropdown Это событие запускается сразу после вызова метода экземпляра hide.
hidden.bs.dropdown Это событие вызывается, когда раскрывающийся список перестает быть скрытым от пользователя (будет ожидать завершения переходов CSS).
  $ ('# myDropdown'). On ('show.bs.dropdown', function () {
  // сделай что-нибудь...
})  

Создание меню, панелей инструментов и строк состояния - Real Python

Когда дело доходит до разработки приложений с графическим пользовательским интерфейсом (GUI) с помощью Python и PyQt, одними из самых полезных и универсальных графических элементов, которые вы когда-либо будете использовать, являются меню, панели инструментов и строки состояния.

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

Из этого руководства вы узнаете:

  • Что меню , панели инструментов и строки состояния это
  • Как создавать меню, панели инструментов и строки состояния программно
  • Как заполнить меню и панель инструментов Python с помощью действий PyQt
  • Как использовать строки состояния для отображения информации о состоянии

Кроме того, вы познакомитесь с некоторыми передовыми методами программирования , которые можно применить при создании меню, панелей инструментов и строк состояния с помощью Python и PyQt.Если вы новичок в программировании графического интерфейса пользователя с помощью PyQt, вы можете попробовать Python и PyQt: создание графического калькулятора рабочего стола.

Вы можете загрузить код и ресурсы для примера приложения, которое вы создадите в этом руководстве, щелкнув поле ниже:

Создание панелей меню, меню и панелей инструментов Python в PyQt

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

  • Меню Файл , которое предоставляет некоторые из следующих пунктов меню:
    • Новый для создания нового документа
    • Открыть для открытия существующего документа
    • Открыть недавние для открытия недавних документов
    • Сохранить для сохранения документа
    • Выход для выхода из приложения
  • Меню Редактировать , которое предоставляет некоторые из следующих пунктов меню:
    • Копировать для копирования некоторого текста
    • Вставить для вставки текста
    • Cut для вырезания текста
  • A Справка Меню, которое предоставляет некоторые из следующих пунктов меню:
    • Справка для перехода к руководству пользователя и справке
    • О для запуска диалогового окна О программе

Вы также можете добавить некоторые из этих параметров на панель инструментов .Панель инструментов - это панель кнопок с значками, которые обеспечивают быстрый доступ к наиболее часто используемым параметрам в приложении. В примере текстового редактора вы можете добавить такие параметры, как Новый , Открыть , Сохранить , Копировать и Вставить на панель инструментов.

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

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

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

Откройте свой любимый редактор кода или IDE и создайте файл Python с именем sample_app.py . Затем добавьте к нему следующий код:

  импорт систем

из PyQt5.QtCore импорт Qt
из PyQt5.QtWidgets импортировать QApplication, QLabel, QMainWindow

класс Window (QMainWindow):
    "" "Главное окно." ""
    def __init __ (self, parent = None):
        "" "Инициализатор." ""
        super () .__ init __ (родитель)
        self.setWindowTitle («Меню и панели инструментов Python»)
        self.resize (400, 200)
        себя.centralWidget = QLabel ("Привет, мир")
        self.centralWidget.setAlignment (Qt.AlignHCenter | Qt.AlignVCenter)
        self.setCentralWidget (self.centralWidget)

если __name__ == "__main__":
    app = QApplication (sys.argv)
    win = Окно ()
    win.show ()
    sys.exit (app.exec_ ())
  

Теперь sample_app.py содержит весь код, необходимый для создания образца приложения PyQt. В этом случае Window наследует от QMainWindow . Итак, вы создаете приложение в стиле главного окна.

В инициализаторе класса .__ init __ () вы сначала вызываете инициализатор родительского класса, используя super () . Затем вы устанавливаете заголовок окна с помощью .setWindowTitle () и изменяете размер окна с помощью .resize () .

Центральным виджетом окна является объект QLabel , который вы будете использовать для отображения сообщений в ответ на определенные действия пользователя. Эти сообщения будут отображаться в центре окна. Для этого позвоните по номеру .setAlignment () для объекта QLabel с парой флагов выравнивания.

Если вы запустите приложение из командной строки, на экране появится следующее окно:

Вот и все! Вы создали приложение в стиле главного окна с помощью Python и PyQt. Вы будете использовать этот образец приложения для всех следующих примеров в этом руководстве.

Создание панелей инструментов

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

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

Область панели инструментов Положение в главном окне
Qt.LeftToolBarArea Левая сторона
Qt.RightToolBarArea Правая сторона
Qt.TopToolBarArea Верх
Qt.BottomToolBarArea Низ

Области панели инструментов определены в PyQt как константы. Если вам нужно их использовать, вам нужно импортировать Qt из PyQt5.QtCore , а затем использовать полностью определенные имена, как в Qt.Левобережная .

Есть три способа добавить панели инструментов в ваше главное окно приложения в PyQt:

  1. QMainWindow.addToolBar (title) создает новый и пустой объект QToolBar и устанавливает для его заголовка окна значение title . Этот метод вставляет панель инструментов в область верхней панели инструментов и возвращает вновь созданную панель инструментов.

  2. QMainWindow.addToolBar (панель инструментов) вставляет объект QToolBar (панель инструментов , ) в область верхней панели инструментов.

  3. QMainWindow.addToolBar (область, панель инструментов) вставляет объект QToolBar (панель инструментов , ) в указанную область панели инструментов (область , ). Если в главном окне уже есть панели инструментов, то панель инструментов помещается после последней существующей панели инструментов. Если панель инструментов уже существует в главном окне, то она будет перемещена только в область .

Если вы используете один из двух последних вариантов, вам необходимо создать панель инструментов самостоятельно.Для этого вы можете использовать один из следующих конструкторов:

  1. QToolBar (родительский)
  2. QToolBar (заголовок, родительский)

В обоих случаях родительский элемент представляет объект QWidget , который будет владеть панелью инструментов. Обычно вы устанавливаете владельцем панели инструментов окно, в котором вы собираетесь использовать панель инструментов. Во втором конструкторе title будет строкой с заголовком окна панели инструментов.PyQt использует этот заголовок окна для создания контекстного меню по умолчанию, которое позволяет скрывать и отображать панели инструментов.

Теперь вы можете вернуться к вашему образцу приложения и добавить следующий метод в Window :

  из PyQt5. QtWidgets импортировать QToolBar
# Snip ...

класс Window (QMainWindow):
    # Snip ...
    def _createToolBars (сам):
        # Использование заголовка
        fileToolBar = self.addToolBar («Файл»)
        # Использование объекта QToolBar
        editToolBar = QToolBar ("Изменить", самостоятельно)
        себя.addToolBar (editToolBar)
        # Использование объекта QToolBar и области панели инструментов
        helpToolBar = QToolBar («Помощь», самостоятельно)
        self.addToolBar (Qt.LeftToolBarArea, helpToolBar)
  

Сначала вы импортируете QToolBar из PyQt5.QtWidgets . Затем в ._createToolBars () вы сначала создаете панель инструментов File , используя .addToolBar () с заголовком. Затем вы создаете объект QToolBar с заголовком «Редактировать» и добавляете его на панель инструментов с помощью .addToolBar () без передачи области панели инструментов. В этом случае панель инструментов Edit размещается в верхней области панели инструментов. Наконец, вы создаете панель инструментов Help и размещаете ее в левой области панели инструментов, используя Qt.LeftToolBarArea .

Последний шаг для выполнения этой работы - вызов ._createToolBars () из инициализатора Window :

  Окно класса (QMainWindow):
    "" "Главное окно." ""
    def __init __ (self, parent = None):
        # Снайпер...
        self._createToolBars ()
  

Вызов ._createToolBars () внутри инициализатора Window создаст три панели инструментов и добавит их в главное окно. Вот как теперь выглядит ваше приложение:

Теперь у вас есть две панели инструментов прямо под строкой меню и одна панель инструментов вдоль левой стороны окна. Каждая панель инструментов имеет двойную пунктирную линию. Когда вы наводите указатель мыши на пунктирные линии, указатель превращается в руку. Если щелкнуть и удерживать пунктирную линию, можно переместить панель инструментов в любое другое положение или область панели инструментов в окне.

Если вы щелкните правой кнопкой мыши панель инструментов, PyQt покажет контекстное меню, которое позволит вам скрывать и отображать существующие панели инструментов в соответствии с вашими потребностями.

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

Использование значков и ресурсов в PyQt

Библиотека Qt включает систему ресурсов Qt, которая представляет собой удобный способ добавления двоичных файлов, таких как значки, изображения, файлы перевода и другие ресурсы, в ваши приложения.

Чтобы использовать систему ресурсов, вам необходимо указать свои ресурсы в файле коллекции ресурсов или файле .qrc . Файл .qrc - это файл XML , который содержит расположение или путь каждого ресурса в вашей файловой системе.

Предположим, что в вашем примере приложения есть каталог ресурсов и , содержащий значки, которые вы хотите использовать в графическом интерфейсе приложения. У вас есть значки для таких опций, как , новый, , , открытый, и т. Д. Вы можете создать файл .qrc , содержащий путь к каждому значку:

   

     resources / file-new.svg 
     ресурсы / файл-open.svg 
     resources / file-save.svg 
     resources / file-exit.svg 
     resources / edit-copy.svg 
     resources / edit-cut.svg 
     resources / edit-paste.svg 
     resources / help-content.svg 


  

Каждая запись <файл> должна содержать путь к ресурсу в вашей файловой системе.Указанные пути относятся к каталогу, содержащему файл .qrc . В приведенном выше примере каталог ресурсов должен находиться в том же каталоге, что и файл .qrc .

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

Когда у вас есть ресурсы для вашего приложения, вы можете запустить инструмент командной строки pyrcc5 , нацеленный на ваш .qrc файл. pyrcc5 поставляется с PyQt и должен быть полностью функциональным в вашей среде Python после установки PyQt.

pyrcc5 считывает файл .qrc и создает модуль Python, содержащий двоичный код для всех ваших ресурсов:

  $ pyrcc5 -o qrc_resources.py resources.qrc
  

Эта команда прочитает resources.qrc и сгенерирует qrc_resources.py , содержащий двоичный код для каждого ресурса.Вы сможете использовать эти ресурсы в своем коде Python, импортировав qrc_resources .

Примечание: Если что-то пойдет не так при запуске pyrcc5 , убедитесь, что вы используете правильную среду Python. Если вы установите PyQt в виртуальной среде Python, вы не сможете использовать pyrcc5 вне этой среды.

Вот фрагмент кода в qrc_resources.py , который соответствует вашим ресурсам .qrc :

  # - * - кодировка: utf-8 - * -

# Код объекта ресурса
#
# Создано: Компилятором ресурсов для PyQt5 (Qt v5.9.5)
#
# ПРЕДУПРЕЖДЕНИЕ! Все изменения, внесенные в этот файл, будут потеряны!

из PyQt5 импорт QtCore

qt_resource_data = b "\
\ x00 \ x00 \ x03 \ xb1 \
\ x3c \
\ x73 \ x76 \ x67 \ x20 \ x78 \ x6d \ x6c \ x6e \ x73 \ x3d \ x22 \ x68 \ x74 \ x74 \ x70 \ x3a \
...
  

Установив qrc_resources.py , вы можете импортировать его в свое приложение и ссылаться на каждый ресурс, набрав двоеточие (:), а затем либо его псевдоним , либо его путь.Например, чтобы получить доступ к file-new.svg с его псевдонимом, вы должны использовать строку доступа ": file-new.svg" . Если у вас не было псевдонима , вы могли бы получить к нему доступ по его пути со строкой доступа ": resources / file-new.svg" .

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

Чтобы использовать значки в своих действиях, сначала необходимо импортировать модуль ресурсов:

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

Примечание. ЛИНТЕРЫ, редакторы и IDE могут пометить вышеуказанный оператор импорта как неиспользуемый, поскольку ваш код не предусматривает его явного использования. Некоторые IDE могут пойти еще дальше и автоматически удалить эту строку.

В этих ситуациях вы должны переопределить предложения вашего линтера, редактора или IDE и сохранить этот импорт в своем коде. В противном случае ваше приложение не сможет отображать ваши ресурсы.

Чтобы создать значок с использованием системы ресурсов, необходимо создать экземпляр QIcon , передав псевдоним или путь к конструктору класса:

  newIcon = QIcon (": файл-новый.svg ")
  

В этом примере вы создаете объект QIcon с файлом file-new.svg , который находится в вашем модуле ресурсов. Это обеспечивает удобный способ использования значков и ресурсов в вашем приложении с графическим интерфейсом.

Теперь вернитесь к вашему образцу приложения и обновите последнюю строку ._createMenuBar () :

  из PyQt5.QtGui импорт QIcon

импортировать qrc_resources
# Snip ...

класс Window (QMainWindow):
    # Snip ...
    def _createMenuBar (сам):
        menuBar = self.строка меню()
        # Использование объекта QMenu
        fileMenu = QMenu ("& Файл", self)
        menuBar.addMenu (fileMenu)
        # Использование заголовка
        editMenu = menuBar.addMenu ("& Изменить")
        # Использование значка и заголовка
        helpMenu = menuBar.addMenu (QIcon (": help-content.svg"), "& Help")
  

Чтобы этот код работал, вам сначала нужно импортировать QIcon из PyQt5.QtGui . Вам также необходимо импортировать qrc_resources . В последней выделенной строке вы добавляете значок в helpMenu , используя help-content.svg из вашего модуля ресурсов.

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

В главном окне приложения теперь отображается значок в меню Справка . При щелчке по значку в меню отображается текст Справка . Использование значков в строке меню - не обычная практика, но PyQt все равно позволяет это делать.

Создание действий для меню и панелей инструментов Python в PyQt

Действия PyQt - это объекты, которые представляют заданную команду, операцию или действие в приложении.Они полезны, когда вам нужно предоставить одинаковые функции для различных компонентов графического интерфейса, таких как параметры меню, кнопки панели инструментов и сочетания клавиш.

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

Также нужно связать свои действия с каким-то функционалом. Другими словами, вам нужно подключить их к функции или методу, которые вы хотите запускать при запуске действия.Это позволит вашему приложению выполнять операции в ответ на действия пользователя в графическом интерфейсе.

Действия достаточно универсальны. Они позволяют повторно использовать и синхронизировать одни и те же функции в параметрах меню, кнопках панели инструментов и сочетаниях клавиш. Это обеспечивает единообразное поведение во всем приложении.

Например, пользователи могут ожидать, что приложение выполнит то же действие, когда они щелкнут пункт меню Открыть… , нажмите кнопку на панели инструментов Открыть или нажмите Ctrl + O на своей клавиатуре.

QAction предоставляет абстракцию, которая позволяет отслеживать следующие элементы:

Для создания действий необходимо создать экземпляр QAction .Есть как минимум три основных способа сделать это:

  1. QAction (родительский)
  2. QAction (текст, родитель)
  3. QAction (значок, текст, родительский элемент)

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

Во втором и третьем конструкторах текст содержит текст, который действие будет отображать в пункте меню или на кнопке панели инструментов.

Текст действия по-разному отображается в параметрах меню и на кнопках панели инструментов. Например, текст & Открыть ... отображается как Открыть… в пункте меню и как Открыть на кнопке панели инструментов.

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

Стиль Дисплей кнопок
Qt.ToolButtonIconOnly Только иконка
Qt.ToolButtonTextOnly Только текст
Qt.ToolButtonTextBesideIcon Текст рядом со значком
Qt.ToolButtonTextUnderIcon Текст под значком
Qt.ToolButtonFollowStyle Соответствует общему стилю базовой платформы

Вы также можете установить текст и значок действия с помощью соответствующих методов установки , .setText () и .setIcon () .

Примечание: Полный список свойств QAction можно найти в документации.

Вот как вы можете создать некоторые действия для вашего примера приложения, используя различные конструкторы QAction :

  из PyQt5.QtWidgets импортировать QAction
# Snip ...

класс Window (QMainWindow):
    # Snip ...
    def _createActions (сам):
        # Создание действия с использованием первого конструктора
        self.newAction = QAction (сам)
        self.newAction.setText ("& Создать")
        # Создание действий с использованием второго конструктора
        self.openAction = QAction ("& Открыть ...", self)
        self.saveAction = QAction ("& Сохранить", self)
        self.exitAction = QAction ("& Выход", self)
        self.copyAction = QAction («& Копировать», self)
        себя.pasteAction = QAction ("& Вставить"; self)
        self.cutAction = QAction ("C & ut", self)
        self.helpContentAction = QAction («& Содержимое справки», self)
        self.aboutAction = QAction ("& О себе", я)
  

В ._createActions () вы создаете несколько действий для вашего примера приложения. Эти действия позволят вам добавлять параметры в меню и панели инструментов приложения.

Обратите внимание, что вы создаете действия как атрибуты экземпляра, поэтому вы можете получить к ним доступ извне ._createActions () с использованием self . Таким образом, вы сможете использовать эти действия как в меню, так и на панелях инструментов.

Примечание: В ._createActions () вы не используете третий конструктор QAction , потому что не имеет смысла использовать значки, если вы еще не видите действия. Вы узнаете, как добавлять значки к действиям, в разделе «Заполнение панелей инструментов действиями».

Следующим шагом будет вызов ._createActions () из инициализатора Window :

  Окно класса (QMainWindow):
    "" "Главное окно."" "
    def __init __ (self, parent = None):
        # Snip ...
        self._createActions ()
        self._createMenuBar ()
        self._createToolBars ()
  

Если вы запустите приложение сейчас, вы не увидите никаких изменений в графическом интерфейсе. Это потому, что действия не отображаются, пока они не добавлены в меню или на панель инструментов. Обратите внимание, что вы вызываете ._createActions () перед вызовом ._createMenuBar () и ._createToolBars () , потому что вы будете использовать эти действия в своих меню и панелях инструментов.

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

Добавление параметров на панели инструментов в PyQt

Панели инструментов

- весьма полезный компонент, когда дело доходит до создания приложений с графическим интерфейсом пользователя с помощью Python и PyQt. Вы можете использовать панель инструментов, чтобы предоставить пользователям быстрый доступ к наиболее часто используемым параметрам в вашем приложении.Вы также можете добавить виджеты, такие как счетчики и поля со списком, на панель инструментов, чтобы пользователь мог напрямую изменять некоторые свойства и переменные из графического интерфейса приложения.

В следующих нескольких разделах вы узнаете, как добавлять параметры или кнопки на панели инструментов с помощью действий, а также как добавлять виджеты на панель инструментов с помощью .addWidget () .

Заполнение панелей инструментов действиями

Чтобы добавить параметры или кнопки на панель инструментов, необходимо вызвать .addAction () .В этом разделе вы будете полагаться на вариант .addAction () , который QToolBar наследует от QWidget . Итак, вы вызовете .addAction () с действием в качестве аргумента. Это позволит вам делиться своими действиями между меню и панелями инструментов.

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

Если вы вернетесь к своему образцу приложения, то вспомните, что добавили три панели инструментов:

  1. Файл
  2. Редактировать
  3. Справка

На панели инструментов Файл вы можете добавить следующие параметры:

На панели инструментов Редактировать вы можете добавить следующие параметры:

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

Вот как вы можете добавить значки к действиям вашего примера приложения:

  Окно класса (QMainWindow):
    # Snip ...
    def _createActions (сам):
        # Действия с файлом
        self.newAction = QAction (сам)
        self.newAction.setText ("& Создать")
        self.newAction.setIcon (QIcon (": file-new.svg"))
        self.openAction = QAction (QIcon (": файл-открытый.svg ")," & Открыть ... ", self)
        self.saveAction = QAction (QIcon (": file-save.svg"), "& Сохранить", self)
        self.exitAction = QAction ("& Выход", self)
        # Редактировать действия
        self.copyAction = QAction (QIcon (": edit-copy.svg"), "& Копировать", self)
        self.pasteAction = QAction (QIcon (": edit-paste.svg"), "& Вставить", self)
        self.cutAction = QAction (QIcon (": edit-cut.svg"), "C & ut", self)
        # Snip ...
  

Чтобы добавить значки к своим действиям, вы обновляете выделенные строки.В случае newAction вы используете .setIcon () . В остальных действиях вы используете конструктор со значком , заголовком и родительским объектом в качестве аргументов.

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

  Окно класса (QMainWindow):
    # Snip ...
    def _createToolBars (сам):
        # Панель инструментов файла
        fileToolBar = self.addToolBar ("Файл")
        fileToolBar.addAction (self.newAction)
        fileToolBar.addAction (self.openAction)
        fileToolBar.addAction (self.saveAction)
        # Панель инструментов редактирования
        editToolBar = QToolBar ("Изменить", самостоятельно)
        self.addToolBar (editToolBar)
        editToolBar.addAction (self.copyAction)
        editToolBar.addAction (self.pasteAction)
        editToolBar.addAction (self.cutAction)
  

В этом обновлении до ._createToolBars () вы добавляете кнопки для параметров Новый , Открыть и Сохранить на панель инструментов Файл .Вы также добавляете кнопки для параметров Копировать , Вставить и Вырезать на панель инструментов Редактировать .

Примечание: Порядок, в котором кнопки отображаются на панели инструментов слева направо, соответствует порядку, в котором вы добавляете кнопки в свой код.

Если сейчас запустить образец приложения, на экране появится следующее окно:

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

Примечание: Когда вы впервые написали ._createToolBars () в разделе Создание панелей инструментов, вы создали панель инструментов Help . Эта панель инструментов была предназначена для демонстрации того, как добавить панель инструментов с использованием другого варианта .addToolBar () .

В приведенном выше обновлении ._createToolBars () вы избавились от панели инструментов Help , чтобы пример был кратким и понятным.

Обратите внимание, что, поскольку вы используете одни и те же действия в своих меню и панелях инструментов, параметры меню также будут отображать значки с левой стороны, что является большим преимуществом с точки зрения производительности и использования ресурсов. Это одно из преимуществ использования действий PyQt для создания меню и панелей инструментов с помощью Python.

Добавление виджетов на панель инструментов

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

Чтобы добавить виджеты на панель инструментов, вам сначала нужно создать виджет, настроить его свойства, а затем вызвать .addWidget () на объекте панели инструментов, передав виджет в качестве аргумента.

Предположим, вы хотите добавить объект QSpinBox на панель инструментов Edit вашего примера приложения, чтобы пользователь мог изменять размер чего-либо, например, размера шрифта. Вам необходимо обновить ._createToolBars () :

  из PyQt5. QtWidgets импортировать QSpinBox
# Снайпер...

класс Window (QMainWindow):
    # Snip ...
    def _createToolBars (сам):
        # Snip ...
        # Добавление виджета на панель инструментов редактирования
        self.fontSizeSpinBox = QSpinBox ()
        self.fontSizeSpinBox.setFocusPolicy (Qt.NoFocus)
        editToolBar.addWidget (self.fontSizeSpinBox)
  

Здесь вы сначала импортируете класс счетчика. Затем вы создаете объект QSpinBox , устанавливаете для его focusPolicy значение Qt.NoFocus и, наконец, добавляете его на панель инструментов Edit .

Примечание: В приведенном выше коде вы устанавливаете для свойства focusPolicy счетчика значение Qt.NoFocus , потому что, если этот виджет получает фокус, то сочетания клавиш приложения не будут работать должным образом.

Теперь, если вы запустите приложение, вы получите следующий результат:

Здесь панель инструментов Edit показывает объект QSpinBox , который пользователи могут использовать для установки размера шрифта или любого другого числового свойства в вашем приложении.

Настройка панелей инструментов

Панели инструментов

PyQt довольно гибкие и настраиваемые. Вы можете установить набор свойств для объекта панели инструментов. Некоторые из наиболее полезных свойств показаны в следующей таблице:

Имущество Управление функциями Настройка по умолчанию
разрешено Площадь Области панели инструментов, в которых можно разместить данную панель инструментов Qt.AllToolBarAreas
плавающий Можно ли перетащить панель инструментов как отдельное окно Истинно
плавающий Является ли панель инструментов отдельным окном Истинно
icon Размер Размер значков, отображаемых на кнопках панели инструментов Определяется стилем приложения
передвижной Можно ли перемещать панель инструментов в области панели инструментов или между областями панели инструментов? Истинно
ориентация Ориентация панели инструментов Qt.Горизонтальный

Все эти свойства имеют связанный метод установки. Например, вы можете использовать .setAllowedAreas () для установки allowedAreas , .setFloatable () для установки floatable и так далее.

Теперь предположим, что вы не хотите, чтобы пользователи перемещали панель инструментов File по окну. В этом случае вы можете установить movable на False , используя .setMovable () :

  Окно класса (QMainWindow):
    # Снайпер...
    def _createToolBars (сам):
        # Панель инструментов файла
        fileToolBar = self.addToolBar («Файл»)
        fileToolBar.setMovable (Ложь)
        # Snip ...
  

Выделенная линия творит здесь волшебство. Теперь ваши пользователи не могут перемещать панель инструментов по окну приложения:

На панели инструментов Файл больше не отображается двойная пунктирная линия, поэтому пользователи не смогут ее перемещать. Обратите внимание, что панель инструментов Edit по-прежнему подвижна. Вы можете изменить другие свойства на своих панелях инструментов, используя тот же подход, и настроить их в соответствии с вашими потребностями.

Организация параметров меню и панели инструментов

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

Чтобы вставить или добавить разделитель к объекту меню, подменю или панели инструментов, вы можете вызвать .addSeparator () для любого из этих объектов.

Например, вы можете использовать разделитель, чтобы отделить опцию Exit в меню File от остальных опций, просто чтобы прояснить, что Exit логически не связаны с остальными опциями в меню. . Вы также можете использовать разделитель, чтобы отделить опцию Найти и заменить в меню Правка от остальных опций, следуя тому же правилу.

Перейдите в образец приложения и обновите ._createMenuBar () , как в следующем коде:

  Окно класса (QMainWindow):
    # Снайпер...
    def _createMenuBar (сам):
        # Меню файла
        # Snip ...
        fileMenu.addAction (self.saveAction)
        # Добавление разделителя
        fileMenu.addSeparator ()
        fileMenu.addAction (self.exitAction)
        # Редактировать меню
        # Snip ...
        editMenu.addAction (self.cutAction)
        # Добавление разделителя
        editMenu.addSeparator ()
        # Подменю "Найти и заменить" в меню "Правка"
        findMenu = editMenu.addMenu («Найти и заменить»)
        # Snip ...
  

В первой выделенной строке вы добавляете разделитель между опциями Сохранить и Выход в меню Файл .Во второй выделенной строке вы добавляете разделитель, который отделяет опцию Найти и заменить от остальных опций в меню Изменить . Вот как работают эти дополнения:

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

В качестве упражнения вы можете перейти к определению ._createToolBars () и добавить разделитель, который отделяет объект QSpinBox от остальных параметров на панели инструментов.

Подключение сигналов и слотов в меню и панелях инструментов

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

Слот - это вызываемый Python, который можно подключать к сигналу виджета для выполнения некоторых действий в ответ на пользовательские события. Если сигнал и слот соединены, то слот будет вызываться автоматически каждый раз при передаче сигнала. Если данный сигнал не подключен к слоту, то при его передаче ничего не произойдет.

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

Объекты QAction могут излучать различные сигналы. Однако наиболее часто используемый сигнал в меню и на панелях инструментов - это .triggered () . Этот сигнал излучается каждый раз, когда пользователь щелкает пункт меню или кнопку панели инструментов. Чтобы соединить .triggered () со слотом, вы можете использовать следующий синтаксис:

  действие = QAction («Текст действия», родительский элемент)
# Соединить действие triggered () со слотом
action.triggered.connect (слот)
  

В этом примере слот вызывается Python.Другими словами, слот может быть функцией, методом, классом или экземпляром класса, который реализует .__ call __ () .

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

  Окно класса (QMainWindow):
    # Snip ...
    def newFile (сам):
        # Здесь находится логика создания нового файла...
        self.centralWidget.setText (" Файл> Новый  нажат")

    def openFile (сам):
        # Здесь находится логика открытия существующего файла ...
        self.centralWidget.setText (" Файл> Открыть ...  нажат")

    def saveFile (сам):
        # Логика сохранения файла здесь ...
        self.centralWidget.setText (" Файл> Сохранить  нажат")

    def copyContent (self):
        # Логика копирования контента здесь ...
        self.centralWidget.setText (" Правка> Копировать  нажата")

    def pasteContent (self):
        # Здесь идет логика вставки контента ...
        self.centralWidget.setText (" Правка> Вставить  нажата")

    def cutContent (self):
        # Логика нарезки контента здесь ...
        self.centralWidget.setText (" Правка> Вырезать , нажата")

    def helpContent (self):
        # Логика для запуска справки здесь ...
        self.centralWidget.setText (" Справка> Содержание справки...  нажал ")

    def about (self):
        # Логика для показа содержимого диалогового окна находится здесь ...
        self.centralWidget.setText (" Справка> О ...  нажата")
  

Эти методы будут играть роль слотов вашего примера приложения. Они будут вызываться каждый раз, когда пользователь нажимает соответствующий пункт меню или кнопку на панели инструментов.

Когда у вас есть слоты, которые обеспечивают функциональность, вам нужно соединить их с действия.Сигнал triggered () . Таким образом, приложение будет выполнять действия в ответ на пользовательские события. Чтобы выполнить эти подключения, перейдите в пример приложения и добавьте следующий метод в Window :

  Окно класса (QMainWindow):
    # Snip ...
    def _connectActions (сам):
        # Подключить действия с файлом
        self.newAction.triggered.connect (self.newFile)
        self.openAction.triggered.connect (self.openFile)
        self.saveAction.triggered.connect (self.saveFile)
        себя.exitAction.triggered.connect (self.close)
        # Подключить действия редактирования
        self.copyAction.triggered.connect (self.copyContent)
        self.pasteAction.triggered.connect (self.pasteContent)
        self.cutAction.triggered.connect (self.cutContent)
        # Действия со справкой Connect
        self.helpContentAction.triggered.connect (self.helpContent)
        self.aboutAction.triggered.connect (self.about)
  

Этот метод свяжет все сигналы .triggered () ваших действий с соответствующими слотами или обратными вызовами.С этим обновлением ваше примерное приложение будет отображать сообщение на объекте QLabel , который вы установили в качестве центрального виджета, сообщая вам, какой пункт меню или кнопка панели инструментов был нажат.

В случае exitAction вы соединяете его сигнал triggered () со встроенным слотом QMainWindow.close () . Таким образом, если вы выберете File → Exit , то ваше приложение закроется.

Наконец, перейдите к инициализатору Window и добавьте вызов ._connectActions () :

  Окно класса (QMainWindow):
    "" "Главное окно." ""
    def __init __ (self, parent = None):
        # Snip ...
        # self._createContextMenu ()
        self._connectActions ()
  

С этим последним обновлением вы можете снова запустить приложение. Вот как работают все эти изменения:

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

Наконец, когда вы выбираете File → Exit , приложение закрывается, потому что сигнал .triggered () из exitAction подключен к встроенному слоту QMainWindow.close () .

В качестве упражнения вы можете попробовать создать пользовательские слоты для параметров Найти… и Заменить… в подменю Найти и заменить , а затем подключить их .triggered () посылает в эти слоты сигналы, чтобы они заработали. Вы также можете поэкспериментировать со слотами, которые вы закодировали в этом разделе, и попробовать сделать с ними что-то новое.

Определение сочетаний клавиш для параметров меню и панели инструментов

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

Вот несколько примеров сочетаний клавиш:

  • Ctrl + C копирует что-то в буфер обмена.
  • Ctrl + V вставляет что-то из буфера обмена.
  • Ctrl + Z отменяет последнюю операцию.
  • Ctrl + O открывает файлы.
  • Ctrl + S сохраняет файлы.

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

Использование последовательностей клавиш

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

QAction реализует .setShortcut () . Этот метод принимает объект QKeySequence в качестве аргумента и возвращает сочетание клавиш.

QKeySequence предоставляет несколько конструкторов. В этом руководстве вы узнаете о двух из них:

  1. QKeySequence (ks, формат) принимает последовательность ключей на основе строки ( ks ) и формат ( формат ) в качестве аргументов и создает объект QKeySequence .

  2. QKeySequence (ключ) принимает константу StandardKey в качестве аргумента и создает объект QKeySequence , который соответствует этим последовательностям ключей на базовой платформе.

Первый конструктор распознает следующие строки:

  • «Ctrl»
  • «Сдвиг»
  • «Альт»
  • «Мета»

Вы можете создавать последовательности клавиш на основе строк, комбинируя эти строки с буквами, знаками препинания, цифрами, именованными клавишами ( вверх , вниз , Home ) и функциональными клавишами ( "Ctrl + S" , «Ctrl + 5» , «Alt + Home» , «Alt + F4» ).Вы можете передать до четырех таких строковых последовательностей ключей в списке, разделенном запятыми.

Примечание: Полный справочник по стандартным ярлыкам на разных платформах см. В разделе «Стандартные ярлыки» документации QKeySequence .

Второй конструктор удобен, если вы разрабатываете многоплатформенное приложение и хотите использовать стандартные сочетания клавиш для каждой платформы. Например, QKeySequence.Copy вернет стандартное сочетание клавиш платформы для копирования объектов в буфер обмена.

Имея это общее представление о том, как определять сочетания клавиш для действий в PyQt, вы можете вернуться к вашему образцу приложения и добавить несколько сочетаний клавиш. Для этого нужно обновить ._createActions () :

  из PyQt5. QtGui импортировать QKeySequence
# Snip ...

класс Window (QMainWindow):
    # Snip ...
    def _createActions (сам):
        # Действия с файлом
        # Snip ...
        # Использование последовательностей ключей на основе строк
        self.newAction.setShortcut ("Ctrl + N")
        себя.openAction.setShortcut ("Ctrl + O")
        self.saveAction.setShortcut ("Ctrl + S")
        # Редактировать действия
        # Snip ...
        # Использование стандартных ключей
        self.copyAction.setShortcut (QKeySequence.Copy)
        self.pasteAction.setShortcut (QKeySequence.Paste)
        self.cutAction.setShortcut (QKeySequence.Cut)
        # Snip ...
  

Сначала вам нужно импортировать QKeySequence . Внутри ._createActions () первые три выделенные строки создают сочетания клавиш, используя последовательность клавиш на основе строки.Это быстрый способ добавить к вашему действию сочетания клавиш. Во вторых трех выделенных строках вы используете QKeySequence для предоставления стандартных сочетаний клавиш.

Если вы запустите пример приложения с этими дополнениями, то ваше меню будет выглядеть следующим образом:

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

Использование ускорителей клавиатуры

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

Вы могли заметить, что когда вы устанавливаете текст для меню или пункта меню, вы обычно вставляете в текст символ амперсанда ( и ). Вы делаете это так, чтобы буква сразу после амперсанда была подчеркнута при отображении в тексте меню или пункта меню. Например, если вы поместите амперсанд перед буквой F в заголовке меню Файл ( «& Файл» ), то при отображении заголовка меню F будет подчеркнутым.

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

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

После того, как вы открыли меню, вы можете получить доступ к любой опции меню, нажав подчеркнутую букву в тексте опции.Например, в Файл вы можете получить доступ к опции Выход из , нажав букву E .

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

Если вы установите C в качестве буквы доступа для опции Copy , то вы не сможете установить C в качестве буквы доступа для опции Cut . Другими словами, в данном меню буквы доступа должны быть уникальными.

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

Создание меню и панелей инструментов: передовые методы и советы

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

  1. Расположите меню в общепринятом порядке. Например, если у вас есть меню Файл , то оно должно быть первым слева направо. Если у вас есть меню Edit , то оно должно быть вторым. Справка должно быть самое правое меню и так далее.

  2. Заполните меню общими параметрами для типа разрабатываемого приложения. Например, в текстовом редакторе меню Файл обычно включают такие параметры, как Новый , Открыть , Сохранить и Выход .Меню Правка часто включают такие параметры, как Копировать , Вставить , Вырезать , Отменить и т. Д.

  3. Используйте стандартные сочетания клавиш для общих параметров. Например, используйте Ctrl + C для Копировать , Ctrl + V для Вставить , Ctrl + X для Cut и т. Д.

  4. Используйте разделители для разделения несвязанных параметров. Эти визуальные подсказки упростят навигацию по вашему приложению.

  5. Добавьте многоточие ( ... ) к заголовку параметров, запускающих дополнительные диалоговые окна. Например, используйте Сохранить как… вместо Сохранить как , Примерно… вместо Примерно и так далее.

  6. Используйте амперсанды ( и ) в параметрах меню, чтобы обеспечить удобные ускорители клавиатуры. Например, "& Открыть вместо " Открыть ", " & Выход " вместо " Выход ".

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

Построение строк состояния Python в PyQt

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

Согласно документации Qt, существует три типа индикаторов состояния:

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

  2. Обычные индикаторы занимают часть строки состояния и отображают информацию, на которую пользователи могут периодически обращаться, например, количество слов в текстовом процессоре. Они могут быть ненадолго скрыты временными индикаторами.

  3. Постоянные индикаторы всегда отображаются в строке состояния, даже если временный индикатор активирован. Они используются для отображения важной информации о текущем режиме приложения, например, когда нажата клавиша Caps Lock.

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

  • Вызовите .statusBar () для объекта QMainWindow . .statusBar () создает и возвращает пустую строку состояния для главного окна.

  • Создайте объект QStatusBar , затем вызовите .setStatusBar () в главном окне с объектом строки состояния в качестве аргумента. Таким образом, .setStatusBar () установит ваш объект строки состояния в качестве строки состояния главного окна.

Здесь у вас есть две альтернативные реализации для добавления строки состояния в ваш пример приложения:

  №1.Использование .statusBar ()
def _createStatusBar (сам):
    self.statusbar = self.statusBar ()

# 2. Использование .setStatusBar ()
def _createStatusBar (сам):
    self.statusbar = QStatusBar ()
    self.setStatusBar (self.statusbar)
  

Обе реализации дают одинаковый результат. Однако в большинстве случаев вы будете использовать первую реализацию для создания строк состояния. Обратите внимание, что для работы второй реализации вам необходимо импортировать QStatusBar из PyQt5.QtWidgets .

Добавьте одну из описанных выше реализаций в окно вашего приложения, а затем вызовите ._createStatusBar () в инициализаторе класса. С этими дополнениями, когда вы снова запустите приложение, вы увидите такое окно:

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

Отображение временных сообщений о состоянии

Основная цель строки состояния - предоставить информацию о состоянии пользователям вашего приложения.Чтобы отображать временные сообщения о состоянии в строке состояния, вам нужно использовать QStatusBar.showMessage () . Этот метод принимает следующие два аргумента:

  1. сообщение содержит сообщение индикатора состояния в виде строки.
  2. тайм-аут содержит количество миллисекунд, в течение которых сообщение будет отображаться в строке состояния.

Если таймаут равен 0 , что является его значением по умолчанию, то сообщение остается в строке состояния до тех пор, пока вы не позвоните .clearMessage () или .showMessage () в строке состояния.

Если в строке состояния есть активное сообщение, и вы вызываете .showMessage () с новым сообщением, новое сообщение будет скрывать или заменять старое.

Перейдите в образец приложения и добавьте следующую строку в ._createStatusBar () :

  Окно класса (QMainWindow):
    # Snip ...
    def _createStatusBar (сам):
        self.statusbar = self.statusBar ()
        # Добавление временного сообщения
        себя.statusbar.showMessage ("Готово", 3000)
  

Последняя строка в ._createStatusBar () заставит ваше приложение отображать сообщение Ready в строке состояния приложения в течение 3000 миллисекунд:

При запуске приложения в строке состояния отображается сообщение Готово . Через 3000 миллисекунд сообщение исчезает, а строка состояния очищается и готова к отображению нового сообщения о состоянии.

Отображение постоянных сообщений в строке состояния

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

Чтобы добавить постоянные сообщения в строки состояния, используйте объект QLabel для хранения сообщения. Затем вы добавляете метку в строку состояния, вызывая .addPermanentWidget () . Этот метод постоянно добавляет данный виджет в текущую строку состояния.Родитель виджета установлен в строку состояния.

.addPermanentWidget () принимает следующие два аргумента:

  1. виджет содержит объект виджета, который вы хотите добавить в строку состояния. Некоторые часто используемые виджеты для этой роли: QLabel , QToolButton и QProgressBar .
  2. stretch используется для вычисления подходящего размера для виджета при увеличении и уменьшении строки состояния.По умолчанию это 0 , что означает, что виджет будет занимать минимальный объем места.

Имейте в виду, что постоянный виджет не будет скрыт или заменен временными сообщениями. .addPermanentWidget () находит виджеты в правой части строки состояния.

Примечание: Вы можете использовать .addPermanentWidget () не только для отображения постоянных сообщений в строке состояния, но и для представления пользователю индикатора выполнения для отслеживания продолжительности данной операции.Вы также можете предоставить кнопки в строке состояния, чтобы пользователь мог изменять свойства, такие как кодировка файла, в текстовом редакторе.

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

Допустим, вы хотите превратить образец приложения в текстовый редактор и добавить сообщение в строку состояния, которое показывает информацию о количестве слов в текущем файле.Для этого вы можете создать метод с именем .getWordCount () , а затем добавить постоянное сообщение, используя .addPermanentWidget () и объект QLabel :

  Окно класса (QMainWindow):
    # Snip ...
    def getWordCount (сам):
        # Логика для вычисления количества слов находится здесь ...
        возврат 42
  

Этот метод добавляет логику для вычисления количества слов в текущем открытом документе. Теперь вы можете отображать эту информацию как постоянное сообщение:

  Окно класса (QMainWindow):
    # Снайпер...
    def _createStatusBar (сам):
        self.statusbar = self.statusBar ()
        # Добавление временного сообщения
        self.statusbar.showMessage («Готово», 3000)
        # Добавление постоянного сообщения
        self.wcLabel = QLabel (f "{self.getWordCount ()} слов")
        self.statusbar.addPermanentWidget (self.wcLabel)
  

В последних двух строках вы сначала создаете объект QLabel ( wcLabel ) для хранения сообщения о количестве слов. Чтобы создать сообщение, вы используете f-строку, в которую вставляете вызов .getWordCount () , чтобы получить информацию о количестве слов. Затем вы добавляете метку в строку состояния с помощью .addPermanentWidget () .

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

Если вы запустите приложение с этим обновлением, вы увидите сообщение о количестве слов в правой части строки состояния:

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

Добавление подсказок к действиям

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

Действия

PyQt позволяют определять следующие типы подсказок:

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

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

Примечание. PyQt также предлагает подсказку «Что это такое», которую вы можете использовать в виджетах и ​​действиях, чтобы показать более подробное описание функций, которые предоставляет виджет или действие. Однако эта тема выходит за рамки данного руководства.

Чтобы узнать, как работают подсказки, вы можете добавить в образец приложения несколько советов по статусу и всплывающих подсказок. Перейдите к ._createActions () и добавьте следующие строки кода:

  Окно класса (QMainWindow):
    # Снайпер...
    def _createActions (сам):
        # Действия с файлом
        # Snip ...
        self.saveAction.setShortcut ("Ctrl + S")
        # Добавление справочных советов
        newTip = "Создать новый файл"
        self.newAction.setStatusTip (newTip)
        self.newAction.setToolTip (newTip)
        # Редактировать действия
        self.copyAction = QAction (QIcon (": edit-copy.svg"), "& Копировать", self)
        # Snip ...
  

Три выделенные строки устанавливают сообщение «Создать новый файл» как статус и всплывающую подсказку для параметра Новый .Если вы запустите приложение сейчас, то увидите, что опция New показывает пользователю краткую, но информативную подсказку:

Если щелкнуть меню Файл и удерживать указатель мыши на Новый , вы увидите сообщение с подсказкой, отображаемое в левой части строки состояния. С другой стороны, если вы наведете указатель мыши на кнопку панели инструментов New , вы увидите сообщение в строке состояния, а также в виде небольшого плавающего прямоугольника рядом с указателем мыши.

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

Заключение

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

Из этого руководства вы узнали, как:

  • Программное создание меню , панелей инструментов и строк состояния
  • Используйте действия PyQt для заполнения меню и панелей инструментов
  • Предоставить информацию о состоянии с помощью строки состояния

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

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

Добавить / изменить / удалить пункты меню в WordPress

Меню - это основной метод навигации на вашем сайте WordPress. Вы можете узнать главное меню как полосу вверху большинства веб-сайтов. Он содержит «Дом», «О нас», «Контакты» и т. Д. Чтобы редактировать элементы в главном меню, используйте это пошаговое руководство.Не забывайте, что вы можете позвонить в Techno Goober за помощью по телефону (302) 645-7177 или написать нам по электронной почте.

Быстрый доступ:


Открыть диспетчер меню

Для начала войдите в свою систему управления контентом WordPress.

Шаг 1: Наведите указатель мыши на Внешний вид и выберите Меню из дополнительного меню на левой боковой панели в системе управления контентом.


Изменить существующий элемент меню

Шаг 1: Перейдите к Внешний вид -> Меню.

Шаг 2: Меню содержит список страниц, которые в настоящее время находятся в вашем меню. Чтобы отредактировать элемент меню, щелкните стрелку раскрывающегося списка рядом с соответствующим элементом меню.

Шаг 3: Отредактируйте элемент меню, изменив ярлык навигации

Шаг 4: Вы можете упорядочить свое меню, перетаскивая заголовки, чтобы изменить порядок меню.

Шаг 5: Когда вы закончите, нажмите Сохранить Меню .

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

Помогите! Я не вижу своих изменений!


Добавить новый пункт меню

Шаг 1. Перейдите к Внешний вид -> Меню.

Шаг 2: Добавьте новые элементы в меню двумя способами.

Если элемент, на который вы хотите создать ссылку, является страницей в WordPress:

  • Установите флажок рядом с заголовком страницы, которую вы хотите добавить. Если вы не видите его там, нажмите Search и введите заголовок страницы.
  • После выбора нажмите Добавить в меню

Если элемент, который вы хотите добавить, представляет собой ссылку за пределами WordPress:

  • Щелкните панель с заголовком Пользовательские ссылки
  • Введите URL-адрес и текст ссылки
  • Нажмите Добавить в меню

Шаг 3: Когда вы закончите, нажмите Сохранить Меню .

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

Помогите! Я не вижу своих изменений!


Удалить пункт меню

Шаг 1: Перейдите к Внешний вид -> Меню.

Шаг 2: Щелкните стрелку раскрывающегося списка рядом с элементом меню, который нужно удалить.

Шаг 3: Нажмите Удалить , чтобы удалить элемент меню.

Шаг 4: Когда вы закончите, нажмите Сохранить Меню .

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

Помогите! Я не вижу своих изменений!

.

Leave a Reply