Window растянуть на весь рабочий стол
Как WPF Window растянуть на весь рабочий стол в не зависимости от количества мониторов и их расширений ?
Отслеживать
задан 20 авг 2018 в 16:09
1,581 2 2 золотых знака 22 22 серебряных знака 42 42 бронзовых знака
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Используйте свойство WindowState и перечисление WindowState.
Вот пример для вашей ситуации, когда нужно растянуть на весь рабочий стол окно:
Пример через Code behind:
public partial class MainWindow : Window < public MainWindow() < InitializeComponent(); WindowState = WindowState.Maximized; >>
Пример через разметку самого окна:
Отслеживать
ответ дан 20 авг 2018 в 19:07
746 5 5 серебряных знаков 19 19 бронзовых знаков
В этом случае оно занимает только основной монитор
20 авг 2018 в 20:29
Как быть если нужно расширить на все подключенные мониторы ?
20 авг 2018 в 20:29
Как бы другие мониторы на то и ДРУГИЕ мониторы, что они идут как ДРУГИЕ мониторы, считайте значит ширину всех мониторов и присваивайте ее своему окну
21 авг 2018 в 10:01
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Глава 3. Создание главного окна приложения
В этой главе мы рассмотрим процесс создания главного окна приложения. По прочтении ее, вы сможете построить интерфейс приложения, который будет содержать меню, панели инструментов, строку состояния и набор дополнительных диалогов.

Рисунок 3.1. Приложение — электронная таблица.
Главное окно — это своего рода каркас, на который «натягивается» весь пользовательский интерфейс приложения. Здесь мы рассмотрим пример создания главного окна электронной таблицы. Внешний вид нашего будущего приложения приводится на рисунке 3.1. В этом приложении мы будем использовать диалоги «Find», «Go-to-Cell» и «Sort», которые были созданы нами в Главе 2. Внутри большинства приложений с графическим интерфейсом «прячется» код, который обеспечивает основные функциональные возможности программы, например, работа с файлами или обработка данных, представляемых пользовательским интерфейсом. В Главе 4 мы покажем — как реализуется такого рода функциональность, на примере нашей электронной таблицы.
3.1. Создание класса-наследника от QMainWindow.
Главное окно любого приложения — это класс-наследник QMainWindow. Большинство приемов, используемых при создания диалогов и о которых мы говорили в Главе 2, вполне применимы и при создании главного окна приложения. Главное окно может быть создано в Qt Designer , но мы все будем делать «вручную», чтобы продемонстрировать процесс создания главного окна во всех деталях. Если вы предпочитаете визуальное проектирование — прочитайте главу «Creating a Main Window Application» в справочном руководстве к Qt Designer . Исходные тексты главного окна будут располагаться в двух файлах: mainwindow.cpp и mainwindow.cpp. Начнем с файла заголовка:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include class QAction; class QLabel; class FindDialog; class Spreadsheet; class MainWindow : public QMainWindow < Q_OBJECT public: MainWindow(QWidget *parent = 0, const char *name = 0); protected: void closeEvent(QCloseEvent *event); void contextMenuEvent(QContextMenuEvent *event);
Это определение класса MainWindow -- наследника QMainWindow. Оно содержит макрос Q_OBJECT, поскольку реализует свои собственные сигналы и слоты.
Функция closeEvent(), в классе QWidget, объявлена как виртуальная. Она автоматически вызывается перед завершением приложения. Мы перекрываем ее в MainWindow для того, чтобы иметь возможность спросить у пользователя -- желает ли он сохранить произведенные изменения, а также для того, чтобы сохранить на диск пользовательские настройки. Аналогично, функция contextMenuEvent() вызывается, когда пользователь щелкает правой кнопкой мыши по виджету. Мы перекрываем ее в MainWindow для того, чтобы вывести контекстное меню.
private slots: void newFile(); void open(); bool save(); bool saveAs(); void find(); void goToCell(); void sort(); void about();
Реализация действий некоторых пунктов меню, таких как File|New и Help|About, выполнена в виде приватных слотов MainWindow. Большинство слотов имеют тип void, но слоты save() и saveAs возвращают результат типа bool. Значение, возвращаемое слотом, игнорируется в случае вызова по сигналу, но когда слот вызывается как обычная функция, то мы получаем от него возвращаемое значение, которое можем использовать для своих нужд.
void updateCellIndicators(); void spreadsheetModified(); void openRecentFile(int param); private: void createActions(); void createMenus(); void createToolBars(); void createStatusBar(); void readSettings(); void writeSettings(); bool maybeSave(); void loadFile(const QString &fileName); void saveFile(const QString &fileName); void setCurrentFile(const QString &fileName); void updateRecentFileItems(); QString strippedName(const QString &fullFileName);
Дополнительные приватные функции, необходимые для обслуживания пользовательского интерфейса.
Spreadsheet *spreadsheet; FindDialog *findDialog; QLabel *locationLabel; QLabel *formulaLabel; QLabel *modLabel; QStringList recentFiles; QString curFile; QString fileFilters; bool modified; enum < MaxRecentFiles = 5 >; int recentFileIds[MaxRecentFiles]; QPopupMenu *fileMenu; QPopupMenu *editMenu; QPopupMenu *selectSubMenu; QPopupMenu *toolsMenu; QPopupMenu *optionsMenu; QPopupMenu *helpMenu; QToolBar *fileToolBar; QToolBar *editToolBar; QAction *newAct; QAction *openAct; QAction *saveAct; . QAction *aboutAct; QAction *aboutQtAct; >; #endif
Кроме функций, класс главного окна имеет ряд скрытых переменных. Все они будут описаны по мере необходимости.
Теперь перейдем к реализации:
#include #include #include #include #include #include #include #include #include #include #include #include "cell.h" #include "finddialog.h" #include "gotocelldialog.h" #include "mainwindow.h" #include "sortdialog.h" #include "spreadsheet.h"
Здесь подключаются заголовки всех классов Qt, которые используются в приложении, а также заголовок класса главного окна и ряд других заголовочных файлов, таких как finddialog.h, gotocelldialog.h и sortdialog.h, которые мы создали в предыдущей главе.
MainWindow::MainWindow(QWidget *parent, const char *name) : QMainWindow(parent, name)
Конструктор начинается с создания виджета Spreadsheet, который будет центральным виджетом главного окна. Центральный виджет занимает все пространство, находящееся между панелью инструментов (toolbar) и строкой состояния (statusbar). Класс Spreadsheet является потомком класса QTable и добавляет некоторые свойства, характерные для электронных таблиц. Среди них можно назвать поддержку формул, которая будет реализована в Главе 4.

Рисунок 3.2. Раскладка виджетов в главном окне.
- Сохранение изображений в файлы и загрузка из файлов, в процессе работы приложения.
- Включение изображений формата XPM в исходный код.
- Механизм "коллекции изображений" ("image collection").
В данном примере мы будем использовать механизм "коллекции изображений", поскольку работать с ним намного проще, чем загружать файлы в процессе исполнения. К тому же он может взаимодействовать со всеми, поддерживаемыми библиотекой, графическими форматами. Все изображения мы будем хранить в каталоге images. Чтобы создать файл на языке C++ (он будет создан утилитой uic), который будет хранить наши изображения, добавим следующие строки в файл .pro:
IMAGES = images/icon.png \ images/new.png \ images/open.png \ . images/find.png \ images/gotocell.png
Изображения будут помещены в исполняемый файл приложения и могут быть получены вызовом QPixmap::fromMimeSource(). Преимущество такого способа организации хранения изображений заключается в том, что они никогда не потеряются, поскольку находятся внутри исполняемого файла.
Если главное окно создается в Qt Designer , то вы можете использовать визуальные средства, предоставляемые построителем, для вставки изображений в коллекцию.
Примечания
Если вы проживаете в стране, чье законодательство признает патенты на программное обеспечение и где компания Unisys имеет зарегистрированный патент на алгоритм сжатия LZW, то Unisys может потребовать от вас приобрести лицензию на использование GIF. По этой причине, поддержка формата GIF в Qt по-умолчанию запрещена. Мы полагаем, что срок действия этого патента по всему миру истечет к концу 2004 года.
| Пред. | В начало | След. |
| Встроенные виджеты и классы диалогов. | На уровень выше | Создание меню и панелей инструментов. |
MainWindow - Главное окно¶
Используйте готовый объект axipy.app.mainwindow .
Methods:
Добавляет окно просмотра данных.
Добавляет панель в главное окно приложения.
Добавляет слой в текущей карте.
Добавляет слой с запросом на помещение на текущую карту или в новую.
Открывает слой в новой карте.
Читает рабочее пространство из файла.
Возвращает Qt5 объект окна.
Удаляет существующую панель у главного окна приложения.
Сохраняет рабочее пространство в файл.
Создает и показывает главное окно программы.
Показывает окно для локального файла html или если это web страница, запускает браузер по ассоциации
Attributes:
Хранилище объектов приложения.
Корректность состояния главного окна.
Добавляет окно просмотра данных.
view ( View ) – окно просмотра данных.
При создании окон просмотра данных axipy.gui.ViewManager.create_mapview() или axipy.gui.ViewManager.create_tableview() они автоматически добавляются в главное окно программы.
Тип результата
add_dock_widget ( dock_widget , area , icon = None ) ¶
Добавляет панель в главное окно приложения. При успешном добавлении возвращает True. Если же данная панель уже присутствует, то команда игнорируется и возвращается False. Элементы управления, которые требуется разместить на панели, создаются в дополнительном окне, а уже это окно, в свою очередь, устанавливается для панели (см. пример ниже).
- dock_widget ( QDockWidget ) – Пользовательская созданная панель.
- area ( DockWidgetArea ) – Расположение.
- icon ( Optional [ QIcon ]) – Иконка для отображения в списке всех доступных панелей.
from PySide2.QtWidgets import QDockWidget, QWidget, QPushButton from PySide2.QtCore import Qt dock = QDockWidget('Заголовок') widget = QWidget() layout = QVBoxLayout() button = QPushButton("Кнопка") button.clicked.connect(lambda: print('Реакция на кнопку')) layout.addWidget(button) layout.addStretch() widget.setLayout(layout) dock.setWidget(widget) app.mainwindow.add_dock_widget(dock, Qt.RightDockWidgetArea, QIcon('filename.png'))
Тип результата
Добавляет слой в текущей карте.
Добавляет слой с запросом на помещение на текущую карту или в новую.
Открывает слой в новой карте.
Хранилище объектов приложения.
Это то же хранилище, которое отображается в панели «Открытые данные».
При открытии объектов данных axipy.da.ProviderManager.openfile() они автоматически попадают в каталог.
Тип результата
Корректность состояния главного окна.
Читает рабочее пространство из файла.
fileName ( str ) – Наименование входного файла.
Возвращает Qt5 объект окна.
Удаляет существующую панель у главного окна приложения.
Сохраняет рабочее пространство в файл.
fileName ( str ) – Наименование выходного файла.
Создает и показывает главное окно программы.
show_html_url ( url , caption ) ¶
Показывает окно для локального файла html или если это web страница, запускает браузер по ассоциации
- url ( QUrl ) – Ссылка на файл html или адрес страницы.
- caption ( Optional [ str ]) – Заголовок окна
Куда девается значок программы в панели задач?
Вот какой вопрос. Создал программу с двумя окнами. При работе программы открывается первое окно, затем если нажать на кнопку на этом окне, то открывается другое окно. Вроде ничего необычного. Первая проблема: после того, как открылось второе окно пропадает значок программы на панели задач. Как сделать чтобы он сохранился? И как раз из-за этой проблемы, второе окно не сворачивается нормально. Тупо просто в угол рабочего стола уходит. В чем дело? Например вот такой код: Первое окно:
from PyQt5 import QtCore, QtGui, QtWidgets class Window_1(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(300, 146) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(40, 30, 221, 41)) self.pushButton.setObjectName("pushButton") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 300, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton.setText(_translate("MainWindow", "Нажми"))
Второе окно:
from PyQt5 import QtCore, QtGui, QtWidgets class Window_2(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(290, 143) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(80, 30, 171, 71)) self.label.setObjectName("label") MainWindow.setCentralWidget(self.centralwidget) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.label.setText(_translate("MainWindow", "Тут что-то написано"))
И главное которое запускает:
import sys, os from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5 import QtWidgets, QtGui from Window1 import Window_1 from Window2 import Window_2 class Window(QMainWindow): def __init__(self, parent=None): super(Window, self).__init__(parent) self.Win = Window_1() self.Win.setupUi(self) self.Win.pushButton.clicked.connect(self.check) def check(self): des = Window2(parent=self) self.hide() class Window2(QMainWindow): def __init__(self, parent=None): super(Window2, self).__init__(parent) self.Win_2 = Window_2() self.Win_2.setupUi(self) self.show() if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())