Как открыть второе окно pyqt5
Creating additional windows
Opening new windows for your application
Getting started with PyQt5 course
In an earlier tutorial we’ve already covered how to open dialog windows. These are special windows which (by default) grab the focus of the user, and run their own event loop, effectively blocking the execution of the rest of your app.
It’s relatively straightforward to open new windows but there are a few things to keep in mind to make sure they work well. In this tutorial we’ll step through how to create a new window, and how to show and hide external windows on demand.
Creating a new window
In Qt any widget without a parent is a window. This means, to show a new window you just need to create a new instance of a widget. This can be any widget type (technically any subclass of QWidget ) including another QMainWindow if you prefer.
There is no restriction on the number of QMainWindow instances you can have. If you need toolbars or menus on your second window you will have to use a QMainWindow to achieve this. This can get confusing for users however, so make sure it’s necessary.
As with your main window, creating a window is not sufficient, you must also show it.

If you run this, you’ll see the main window. Clicking the button may show the second window, but if you see it it will only be visible for a fraction of a second. What’s happening?
Inside this method, we are creating our window (widget) object, storing it in the variable w and showing it. However, once we leave the method we no longer have a reference to the w variable (it is a local variable) and so it will be cleaned up – and the window destroyed. To fix this we need to keep a reference to the window somewhere, for example on the self object.
Now, when you click the button to show the new window, it will persist.
However, what happens if you click the button again? The window will be re-created! This new window will replace the old in the self.w variable, and – because there is now no reference to it – the previous window will be destroyed.
You can see this in action if you change the window definition to show a random number in the label each time it is created.
The __init__ block is only run when creating the window. If you keep clicking the button the number will change, showing that the window is being re-created.
One solution is to simply check whether the window has already being created before creating it. The example below shows this in action.

Using the button you can pop up the window, and use the window controls to close it. If you click the button again, the same window will re-appear.
This approach is fine for windows that you create temporarily – for example if you want to pop up a window to show a particular plot, or log output. However, for many applications you have a number of standard windows that you want to be able to show/hide them on demand.
In the next part we’ll look at how to work with these types of windows.
Toggling a window
Often you’ll want to toggle the display of a window using an action on a toolbar or in a menu. As we previously saw, if no reference to a window is kept, it will be discarded (and closed). We can use this behaviour to close a window, replacing the show_new_window method from the previous example with –
By setting self.w to None the reference to the window will be lost, and the window will close.
If we set it to any other value that None the window will still close, but the if self.w is None test will not pass the next time we click the button and so we will not be able to recreate a window.
Create GUI Applications with Python & Qt5
The easy way to create desktop applications
The complete guide to building GUI applications with PyQt5. From the basics of creating a desktop window to the key features you need to build real apps.
Downloadable ebook (PDF, ePub) & Complete Source code
To support developers in [[ countryRegion ]] I give a [[ localizedDiscount[couponCode] ]]% discount with the code [[ couponCode ]] — Enjoy!
For [[ activeDiscount.description ]] I’m giving a [[ activeDiscount.discount ]]% discount with the code [[ couponCode ]] — Enjoy!
Persistent windows
In the following example we create our external window in the __init__ block for the main window, and then our show_new_window method simply calls self.w.show() to display it.
Showing & hiding persistent windows
The complete working example of this persistent window and toggling the show/hide state is shown below.
Multiple windows

If you found this tutorial helpful, please consider sharing it with your network.
Your support helps me to continue writing these tutorials. Thankyou!
Русские Блоги
Окно Python3 PyQt5 (интернационализация / QMainWindow / QWidget / QDialog)
Окно Python3 PyQt5 (интернационализация / QMainWindow / QWidget / QDialog)
Эта статья написана Лужуо, пожалуйста, сохраните эту информацию для пересылки.
Оригинал: https://blog.csdn.net/Rozol/article/details/87904498
Введение
Окно в основном делится на:QMainWindow (главное окно) / QWidget (базовое окно) / QDialog (диалоговое окно) Эти трое.
Используемые слова:
1. Если это главное окно и требуется строка меню или что-то подобное, используйте QMainWindow.
2. Если это диалоговое окно, используйте QDialog.
3. Для других сомнительных окон вы можете использовать QWidget.
Интернационализация текста
Позвольте мне сначала поговорить об интернационализации текста. Если вы не выполняете интернационализацию, то после ее запуска вы обнаружите, что все элементы управления на английском языке.
Встроенная интернационализация
эффект:
Индивидуальная интернационализация
2. Откройте Linguist для ручного перевода и сохраните после перевода.
эффект:
Я написал, чтобы добиться интернационализации, и вы можете использовать это с родным английским интерфейсом.
Например, если расположение кода изменится, вы получите устаревшую метку, например
На этот раз просто нужно поставить type=»obsolete» Удалить, затем поставить line=»24″ Просто измените его на правильную строку.
Кроме того, для перевода требуется только цвет Этикетки достаточно,
Встроенная интернационализация + индивидуальная интернационализация
Просто загрузите двух переводчиков одновременно.
эффект:
Если вам нужно переключить язык
Главное окно QMainWindow
Создайте главное окно
Первый способ: создание объектов
Второй тип: метод наследования
эффект:
Расположение и размер окна
У нас есть три способа установить положение и размер окна:
Первый:
Второй (комбинация первых двух методов):
Третий тип (центрированный дисплей):
Геометрия окна:
Окно разделено на геометрическую структуру без внешней рамки и геометрическую структуру с внешней рамкой.
закрой окно
Чтобы закрыть окно, помимо нажатия на красный × выход в правом верхнем углу, есть также логика для написания собственного выхода (подключенного к слоту выхода).
Выйдите из подключения сигнального слота приложения:
Событие выхода из приложения:
Если вы хотите что-то сделать при выходе из приложения, например, вывести диалоговое окно, вам нужно переписать def closeEvent(self, event): метод
Строка меню MenuBar
Строка меню состоит из строки меню / меню / подменю / действия.
Создать действие:
Создать подменю:
Создать меню:
Создайте строку меню:
эффект:
Проверить действие:
Конечно, в дополнение к более распространенным действиям, упомянутым выше, в меню есть еще одно действие, называемое действием проверки.
эффект:
Контекстное меню:
В дополнение к меню, появляющемуся в строке меню, у него также есть форма, которую мы используем правой кнопкой мыши.
Для реализации контекстного меню необходимо переопределить событие контекстного меню ( def contextMenuEvent(self, event): )
1. Создайте подменю и добавьте действия.
2. Получите действие, выбранное пользователем, а затем определите, какое действие является действием.
эффект:
Панели инструментов Панель инструментов
Панель инструментов в основном существует для удобства пользователей, и ее функции должны быть найдены в строке меню (это сказано в университетской книге дизайна, но строка меню не имеет этой функции и может заставить меня_)
Создать действие
Добавить это действие на панель инструментов
эффект
Добавьте элементы управления:
В дополнение к добавлению действий ToolBar также может добавлять любые элементы управления.
Панель управления док-станцией для виджетов
Вложение макета области стыковочного пространства завершается QDockWidget.
Вам необходимо создать виджет и установить его на DockWidget.
2. Создайте DockWidget.
эффект:
Вложенный макет:
Когда вы добавляете несколько DockWidgets в главное окно, вы обнаружите, что эти окна можно размещать только слева и справа. Чтобы достичь середины из двух DockWidgets, вам нужно включить вложение.
Перестановки:
Если вы хотите расположить эти маленькие окна по горизонтали (или по вертикали, или по горизонтали + по вертикали), разделите их по горизонтали на одинаковую ширину.
вкладка:
Несколько окон объединяются в одно окно, и окна переключаются с помощью тегов вкладок.
Комплексный эффект
QtWidgets.QDockWidget.DockWidgetFeature
| Constant | Description |
|---|---|
| QDockWidget.DockWidgetClosable | Может быть закрыт |
| QDockWidget.DockWidgetMovable | он может двигаться |
| QDockWidget.DockWidgetFloatable | сплавной |
| QDockWidget.DockWidgetVerticalTitleBar | Вертикальная строка заголовка |
| QDockWidget.AllDockWidgetFeatures | Все особенности |
| QDockWidget.NoDockWidgetFeatures | Нет функций |
QtCore.Qt.DockWidgetArea
| Constant | Description |
|---|---|
| Qt.LeftDockWidgetArea | Слева от главного окна |
| Qt.RightDockWidgetArea | Правая часть главного окна |
| Qt.TopDockWidgetArea | Вверху главного окна |
| Qt.BottomDockWidgetArea | Внизу главного окна |
| Qt.AllDockWidgetAreas | Везде |
| Qt.NoDockWidgetArea | не знать |
Статус бар
В строке состояния обычно отображается некоторая подсказка, которая может быть временной или постоянной.
Как правило, информация в реальном времени отображается в левой части строки состояния, а постоянная информация отображается в правой части.
Отображение информации в реальном времени:
Добавьте элементы управления:
эффект:
Базовое окно QWidget
Примечание: только форма Slots, комментарии соответствуют фактическому выполнению; форма Func & Slots, эффект выполнения слота находится в (), а фактическое выполнение согласуется с двумя без ()
окно:
Стиль окна:
Мы можем настроить стиль окна.
Тип окна (| комбинация):
| Qt.WindowType перечисление | Description |
|---|---|
| Qt.Widget | По умолчанию (свернуть + развернуть + закрыть) |
| Qt.Window | Нормальное окно (свернуть + развернуть + закрыть) |
| Qt.Dialog | Диалог (знак? + Закрыть) |
| Qt.Sheet | форма macOS |
| Qt.Drawer | Ящик macOS. |
| Qt.Popup | Пузырь (без границы) |
| Qt.Tool | Окно инструментов |
| Qt.ToolTip | Всплывающая подсказка (без рамки + без панели задач) |
| Qt.SplashScreen | Начальный экран (без рамки + без панели задач) |
| Qt.Desktop | рабочий стол |
| Qt.SubWindow | Дочернее окно (без кнопки + заголовок) |
| Qt.ForeignWindow | Оконная ручка |
| Qt.CoverWindow | Окно обложки (отображается в свернутом виде) |
Логотип внешнего вида окна:
| Qt.WindowFlags перечисление | Description |
|---|---|
| Qt.MSWindowsFixedSizeDialogHint | Размер окна нельзя изменить |
| Qt.MSWindowsOwnDC | Добавить контекстное меню |
| Qt.BypassWindowManagerHint | Отключить все оконные менеджеры |
| Qt.X11BypassWindowManagerHint | Игнорировать оконный менеджер |
| Qt.FramelessWindowHint | Окно без рамки |
| Qt.NoDropShadowWindowHint | Отключить тени от окон |
| Qt.WindowFlags перечисление | Description |
|---|---|
| Qt.CustomizeWindowHint | Настройте строку заголовка окна (с этим логотипом используется следующий логотип, в противном случае используется строка заголовка по умолчанию) |
| Qt.WindowTitleHint | Показать строку заголовка окна |
| Qt.WindowSystemMenuHint | Показать системное меню |
| Qt.WindowMinimizeButtonHint | Показать кнопку свертывания |
| Qt.WindowMaximizeButtonHint | Показать кнопку увеличения |
| Qt.WindowMinMaxbuttonHint | Показывать кнопку свертывания и кнопку максимизации |
| Qt.WindowCloseButtonHint | Показать кнопку закрытия |
| Qt.WindowContextHelpButtonHint | Показать кнопку? |
| Qt.MacWindowToolBarButtonHint | Добавить кнопки панели инструментов в macOS |
| Qt.WindowFullscreenButtonHint | Добавить полноэкранную кнопку в macOS |
| Qt.BypassGraphicsProxyWidget | Запретить автоматическое встраивание окон в сцену |
| Qt.WindowShadeButtonHint | Замените кнопку сворачивания на кнопку тени |
| Qt.WindowStaysOnTopHint | Всегда самое верхнее окно |
| Qt.WindowStaysOnBottomHint | Всегда самое нижнее окно |
Другие высокие знаки:
| Qt.WindowFlags перечисление | Description |
|---|---|
| Qt.WindowTransparentForInput | Окно только ввод, не принимает ввод |
| Qt.WindowOverridesSystemGestures | В окне есть свои жесты, а жесты системного уровня отключены |
| Qt.WindowDoesNotAcceptFocus | Не принимает фокус ввода |
| Qt.MaximizeUsingFullscreenGeometryHint | При максимальном увеличении окна занимайте как можно больше экрана (в зависимости от того, поддерживает ли это платформа, и может быть размещен в пользовательском интерфейсе системы) |
| Qt.WindowType_Mask | Извлечь маску типа окна |
Стиль окна:
Разверните окно:
| Slots & Func | Description |
|---|---|
| showMinimized | Окно дисплея свернуто |
| showMaximized | Показать окно развернуто |
| showFullScreen | Окно отображения в полноэкранном режиме |
| showNormal | Показать окно в обычном режиме |
Вышеупомянутые 4 функции и слоты.
Чтобы развернуть окно, есть способ вызвать
| Constant | Description |
|---|---|
| Qt.WindowNoState | нормальный статус |
| Qt.WindowMinimized | Свернутое состояние |
| Qt.WindowMaxmized | Максимальное состояние |
| Qt.WindowFullScreen | Полноэкранное состояние |
| Qt.WindowActive | Активное состояние |
Отключить окно:
Отключение этого окна приведет к невозможности использования всех элементов управления в этом окне.
Да, это слот
| Func & Slots | Description |
|---|---|
| setEnabled | Включить окно (отключить) |
| setDisabled | Отключить окно (включить) |
Видимость окна
| Func & Slots | Description |
|---|---|
| setVisible | Показать спрятать) |
| setHidden | Скрыть (показать) |
| Slots | Description |
|---|---|
| show | дисплей |
| hide | скрывать |
| close | Закрыть (return bool) |
| lower | Опустить окно в самый низ |
| raise | Поднимите окно наверх |
Также есть несколько событий, которые можно воспроизвести:
фокус:
| Func & Slots | Description |
|---|---|
| setFocus | Сосредоточьтесь |
Еще у него есть два способа переписать
Мышь и клавиатура:
Несколько перезаписываемых событий клавиатуры
Несколько событий мыши, которые можно переписать:
| Перечисление Qt.MouseButton | Description |
|---|---|
| Qt.NoButton | без ключа |
| Qt.LeftButton | Левая кнопка |
| Qt.RightButton | Щелкните правой кнопкой мыши |
| Qt.MidButton | Средняя кнопка |
| Перечисление Qt.Orientation | Description |
|---|---|
| Qt.Horizontal | горизонтальный |
| Qt.Vertical | вертикальный |
Вышеупомянутое событие движения мыши отслеживается только при нажатии. Если вы хотите отслеживать без нажатия, вам необходимо добавить следующий код
расположение:
Шрифт:
Что касается обработки событий:
Всплывающая подсказка QToolTip
Установить пузырьковый шрифт
Используйте на виджетах, которым нужны подсказки
Случай: добавление всплывающих подсказок на виджетах и кнопках PushButton
эффект:
Диалог QDialog
В QDialog также есть несколько диалоговых окон, связанных с печатью (QAbstractPrintDialog / QPageSetupDialog / QPrintDialog / QPrintPreviewDialog), все из которых помещаются в печать.
QDialog
Диалог может содержать собственные элементы управления для создания внешнего вида и функций. Конечно, в систему также встроено множество хорошо продуманных диалоговых окон, например: QColorDialog / QFileDialog / QMessageBox и т. Д.
| Qt.WindowModality | Description |
|---|---|
| Qt.NonModal | Немодальный, может взаимодействовать с другими окнами |
| Qt.WindowModal | Окно модальное, если текущий диалог не обрабатывается, взаимодействие с родительским окном диалога будет запрещено |
| Qt.ApplicationModal | Модальное приложение, предотвращающее взаимодействие с любыми другими окнами |
Также очень просто использовать:
Окно сообщения QMessageBox
В основном всплывает окно сообщения: диалоговые окна с запросом / предупреждением / ошибкой / запросом / о т. Д., Но только отображаемые значки отличаются
Устанавливается отдельно:
эффект:
Сложный:
Тип диалога и значок
| QMessageBox.Icon | icon |
|---|---|
| QMessageBox.NoIcon | — |
| QMessageBox.Question | ![]() |
| QMessageBox.Information | ![]() |
| QMessageBox.Warning | ![]() |
| QMessageBox.Critical | ![]() |
Поддерживаемые диалоговые окна с типами, кроме NoIcon, имеют остальные 4, а их эффекты и коды являются эффектами, просто меняя значок.
плюс значок, не отображается ни значка, ни кнопки для кода.
эффект:
Кнопка:
| QMessageBox.StandardButton | button name | Role |
|---|---|---|
| QMessageBox.Ok | “OK” | AcceptRole |
| QMessageBox.Open | “Open” | AcceptRole |
| QMessageBox.Save | “Save” | AcceptRole |
| QMessageBox.Cancel | “Cancel” | RejectRole |
| QMessageBox.Close | “Close” | RejectRole |
| QMessageBox.Discard | “Discard” or “Don’t Save” | DestructiveRole |
| QMessageBox.Apply | “Apply” | ApplyRole |
| QMessageBox.Reset | “Reset” | ResetRole |
| QMessageBox.RestoreDefaults | “Restore Defaults” | ResetRole |
| QMessageBox.Help | “Help” | HelpRole |
| QMessageBox.SaveAll | “Save All” | AcceptRole |
| QMessageBox.Yes | “Yes” | YesRole |
| QMessageBox.YesToAll | “Yes to All” | YesRole |
| QMessageBox.No | “No” | NoRole |
| QMessageBox.NoToAll | “No to All” | NoRole |
| QMessageBox.Abort | “Abort” | RejectRole |
| QMessageBox.Retry | “Retry” | AcceptRole |
| QMessageBox.Ignore | “Ignore” | AcceptRole |
| QMessageBox.NoButton | — | — |
Китайское название кнопки:
Названия кнопок по умолчанию все на английском языке, если вы хотите отображать на китайском языке, вам нужно разобраться с этим.
эффект:
| Role | Description |
|---|---|
| QMessageBox.InvalidRole | недействительным |
| QMessageBox.AcceptRole | принимать |
| QMessageBox.RejectRole | Отказываться |
| QMessageBox.DestructiveRole | Критические изменения (например, отмена изменений) |
| QMessageBox.ActionRole | Измените элементы в диалоге |
| QMessageBox.HelpRole | help |
| QMessageBox.YesRole | Yes |
| QMessageBox.NoRole | No |
| QMessageBox.ApplyRole | Изменение приложения |
| QMessageBox.ResetRole | сброс |
Случай:
Например, когда мы закрываем окно, появляется окно сообщения.
эффект:
Диалог ввода QInputDialog
Диалоговое окно ввода состоит из текстового поля и двух кнопок. Пользователь нажимает кнопку ОК (или клавишу Enter), и диалоговое окно собирает введенные данные и возвращается.
| Constant | Description |
|---|---|
| QInputDialog.getText | Одна строка текста |
| QInputDialog.getMultiLineText | Многострочный текст |
| QInputDialog.getDouble | Плавающая точка |
| QInputDialog.getInt | целое число |
| QInputDialog.getItem | Выбор предмета |
эффект:
Китайское название кнопки:
эффект
Диалог выбора шрифта QFontDialog
Пользователь может выбрать размер / стиль / формат шрифта и т. Д. Текста.
эффект:
Китайская кнопка и китаизация:
Диалог файла QFileDialog
Используется для открытия и сохранения файлов, вы можете открывать файлы с указанными расширениями или можете установить начальный каталог.
| Constant | Description |
|---|---|
| getOpenFileName() | Открыть диалоговое окно выбора файла |
| getOpenFileNames() | Открыть диалог выбора нескольких файлов |
| getExistingDirectory() | Откройте диалоговое окно «Выбор папки» |
| getSaveFileName() | Откройте диалоговое окно сохранения файла |
Конечно, его также можно установить отдельно:
эффект:
Режим отображения окна, Но не влияет на win10
| ViewMode | Description |
|---|---|
| QFileDialog.Detail | Подробности (список + другая информация) |
| QFileDialog.List | Список (имя файла + список) |
Требуемый файловый режим:
| QFileDialog.FileMode | Description |
|---|---|
| QFileDialog.AnyFile | Независимо от наличия (годен для консервации) |
| QFileDialog.ExistingFile | Одно имя файла (подходит для открытия) |
| QFileDialog.Directory | Единый каталог (подходит для выбора каталога) |
| QFileDialog.ExistingFiles | 1 или несколько существующих файлов (подходит для нескольких открытий) |
Написание фильтра:
Китайская кнопка и китаизация
Диалог выбора цвета QColorDialog
эффект:
Создавайте цвета напрямую:
Китайская кнопка и китаизация:
Диалог выполнения QProgressDialog
эффект:
Китайская кнопка и китаизация:
Сообщение об ошибке QErrorMessage
show this message again √Удалить, при следующем отображении не будет выполнено (нет отображения)
эффект:
Китайская кнопка и китаизация:
Окно мастера QWizard
Обычно используется при установке приложения или при первом запуске приложения.
Окно мастера состоит из нескольких страниц мастера (QWizardPage) с помощью следующих addPage() Метод добавления страницы мастера в окно мастера (QWizard)
Страница мастера QWizardPage:
Положение отображения контента:

стиль:
| WizardStyle | Description |
|---|---|
| ClassicStyle | ![]() ![]() |
| ModernStyle | ![]() ![]() |
| MacStyle | ![]() ![]() |
| AeroStyle | ![]() ![]() |
Хотя официальная карта стилей выглядит так, фактический эффект отображения может не потребоваться.
Отрегулируйте порядок отображения страниц мастера в соответствии с условиями
По умолчанию он отображается с шагом идентификатора, мы можем переопределить QWizardPage.nextId() Обеспечьте динамический порядок.
кнопка
| QWizard.WizardButton | Description |
|---|---|
| QWizard.BackButton | предыдущий |
| QWizard.NextButton | Следующий шаг |
| QWizard.CommitButton | Отправить |
| QWizard.FinishButton | исполняйте |
| QWizard.CancelButton | Отмена |
| QWizard.HelpButton | Помогите |
| QWizard.CustomButton1 | Первая настраиваемая кнопка |
| QWizard.CustomButton2 | 2-я пользовательская кнопка |
| QWizard.CustomButton3 | Третья настраиваемая кнопка |
| QWizard.Stretch | Используется в ButtonLayout, горизонтальное растяжение |
Расположение кнопок:
Используйте, а не QWizard.Stretch Различия:
Опция:
| QWizard.WizardOption | Description |
|---|---|
| QWizard.IndependentPages | Независимая страница |
| QWizard.IgnoreSubTitles | Не показывать субтитры |
| QWizard.ExtendedWatermarkPixmap | Растяните любую карту WatermarkPixmap до края экрана |
| QWizard.NoDefaultButton | Не устанавливайте кнопки «Далее» и «Готово» по умолчанию. |
| QWizard.NoBackButtonOnStartPage | Не показывать кнопку «Назад» на стартовой странице |
| QWizard.NoBackButtonOnLastPage | Не показывать кнопку «Назад» на конечной странице |
| QWizard.DisabledBackButtonOnLastPage | Отключить последнюю страницу Кнопка Назад |
| QWizard.HaveNextButtonOnLastPage | Показать последнюю страницу Кнопка Далее (отключить) |
| QWizard.HaveFinishButtonOnEarlyPages | Отображать не последнюю страницу Кнопка «Готово (отключить)» |
| QWizard.NoCancelButton | Не отображать кнопку Отмена |
| QWizard.CancelButtonOnLeft | Поместите Отмена слева на спине |
| QWizard.HaveHelpButton | Показать кнопку справки |
| QWizard.HelpButtonOnRight | Поместите справку в крайний правый угол раскладки кнопок |
| QWizard.HaveCustomButton1 | Показать первую настраиваемую кнопку |
| QWizard.HaveCustomButton2 | Показать вторую настраиваемую кнопку |
| QWizard.HaveCustomButton3 | Показать третью настраиваемую кнопку |
| QWizard.NoCancelButtonOnLastPage | Кнопка отмены не отображается на последней странице |
Пользовательская кнопка:
Китайская кнопка и китаизация:
Просто используйте системный перевод напрямую
образ
Установите картинку:
| QWizard.WizardPixmap | Description |
|---|---|
| QWizard.WatermarkPixmap | Отображается в левой части ClassicStyle / ModernStyle |
| QWizard.LogoPixmap | Отображается в правой части заголовка ClassicStyle или ModernStyle |
| QWizard.BannerPixmap | Отображение на заднем плане строки заголовка заголовка страницы ModernStyle |
| QWizard.BackgroundPixmap | Отображение в фоновом режиме MacStyle |
Его нужно сочетать со стилями, чтобы иметь эффект
Настройте элементы управления:
Установите элемент управления в левой части мастера, установите его над водяным знаком при использовании WatermarkPixmap (ClassicStyle / ModernStyle) и установите его в левой части мастера, если используются другие стили или не используются водяные знаки.










































