Вопрос или проблема
У меня есть панель меню с действиями НОВЫЙ, ОТКРЫТЬ, ВЫХОД и так далее. Мне нужно: когда я нажимаю действие НОВЫЙ, я хочу создать такое же приложение, как это. Как мне это сделать?
Нажмите кнопку действия НОВЫЙ, и она создаст такое же приложение, как это.
Ответ или решение
Для создания новой инстанции приложения в PySide6 в ответ на действие "NEW" в меню, вам нужно будет создать новый экземпляр основного окна вашего приложения. Это можно сделать, создав класс для вашего основного окна и инициализируя новый экземпляр этого класса при выборе действия "NEW". Вот подробное руководство по реализации этой функции.
Шаги для реализации:
-
Создайте класс основного окна: Убедитесь, что у вас есть основной класс приложения, который наследует от
QMainWindow
. -
Реализуйте метод для создания нового приложения: Этот метод будет вызываться при выборе действия "NEW" в меню.
-
Обработайте меню: Добавьте действия в меню и свяжите их с соответствующими методами.
Пример кода:
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QMenu, QAction, QVBoxLayout, QLabel, QWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Главное Окно")
# Создание основного виджета
self.central_widget = QWidget()
self.layout = QVBoxLayout()
self.label = QLabel("Это основное окно приложения.")
self.layout.addWidget(self.label)
self.central_widget.setLayout(self.layout)
self.setCentralWidget(self.central_widget)
# Создание меню
menu_bar = self.menuBar()
file_menu = menu_bar.addMenu("Файл")
# Действия в меню
new_action = QAction("Новый", self)
new_action.triggered.connect(self.create_new_instance)
file_menu.addAction(new_action)
open_action = QAction("Открыть", self)
file_menu.addAction(open_action)
exit_action = QAction("Выход", self)
exit_action.triggered.connect(self.close)
file_menu.addAction(exit_action)
def create_new_instance(self):
# Создание нового приложения
self.new_instance = MainWindow()
self.new_instance.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec())
Объяснение кода:
-
Класс MainWindow: В этом классе мы определяем основное окно приложения, устанавливаем заголовок и добавляем центральный виджет с меткой.
-
Создание меню: В методе
__init__
создается меню "Файл", в котором добавляются действия "Новый", "Открыть" и "Выход". -
Метод create_new_instance: Этот метод создает новый экземпляр
MainWindow
и вызывает методshow()
, чтобы показать его. Это реализует требуемую функциональность — при нажатии на действие "Новый" открывается новое окно приложения.
Заключение:
С помощью этого кода вы можете создавать несколько инстанций одного и того же приложения в PySide6. Это полезно, если вам нужно, чтобы пользователь работал с несколькими документами одновременно, так как каждое новое окно будет независимо от других. Вы можете расширять функционал, добавляя дополнительные элементы интерфейса и взаимодействия по мере необходимости.