Столкнулся со следующей проблемой, при закрытии виджета нужно выполнить дополнительное действие, но как это сделать не особо понимаю.
Есть главная форма, на которую наброшен виджет:
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.setWindowModality(QtCore.Qt.NonModal) MainWindow.resize(493, 470) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) MainWindow.setSizePolicy(sizePolicy) MainWindow.setMinimumSize(QtCore.QSize(493, 470)) MainWindow.setMaximumSize(QtCore.QSize(493, 470)) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.server_list = QtWidgets.QListWidget(self.centralwidget) self.server_list.setGeometry(QtCore.QRect(0, -6, 256, 192)) self.server_list.setObjectName("server_list") self.run_button = QtWidgets.QPushButton(self.centralwidget) self.run_button.setGeometry(QtCore.QRect(430, 340, 75, 33)) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.run_button.sizePolicy().hasHeightForWidth()) self.run_button.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setPointSize(12) self.run_button.setFont(font) self.run_button.setObjectName("run_button") self.setting_widget = QtWidgets.QWidget(self.centralwidget) self.setting_widget.setGeometry(QtCore.QRect(120, 10, 391, 195)) self.setting_widget.setMinimumSize(QtCore.QSize(391, 195)) self.setting_widget.setMaximumSize(QtCore.QSize(391, 195)) self.setting_widget.setBaseSize(QtCore.QSize(391, 200)) self.setting_widget.setObjectName("setting_widget") self.verticalLayoutWidget = QtWidgets.QWidget(self.setting_widget) self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 391, 414)) self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") self.vertical_layout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) self.vertical_layout.setContentsMargins(5, 5, 5, 5) self.vertical_layout.setSpacing(5) self.vertical_layout.setObjectName("vertical_layout") self.dir_label_2 = QtWidgets.QLabel(self.verticalLayoutWidget) font = QtGui.QFont() font.setFamily("Nirmala UI") font.setPointSize(9) self.dir_label_2.setFont(font) self.dir_label_2.setObjectName("dir_label_2") self.vertical_layout.addWidget(self.dir_label_2) self.files_for_copy_widget = QtWidgets.QWidget(self.verticalLayoutWidget) self.files_for_copy_widget.setMinimumSize(QtCore.QSize(311, 231)) self.files_for_copy_widget.setMaximumSize(QtCore.QSize(350, 250)) self.files_for_copy_widget.setObjectName("files_for_copy_widget") self.edit_row_button = QtWidgets.QPushButton(self.files_for_copy_widget) self.edit_row_button.setGeometry(QtCore.QRect(40, 10, 31, 23)) self.edit_row_button.setText("") self.edit_row_button.setObjectName("edit_row_button") self.delete_row_button = QtWidgets.QPushButton(self.files_for_copy_widget) self.delete_row_button.setGeometry(QtCore.QRect(80, 10, 31, 23)) self.delete_row_button.setText("") self.delete_row_button.setObjectName("delete_row_button") self.add_row_button = QtWidgets.QPushButton(self.files_for_copy_widget) self.add_row_button.setGeometry(QtCore.QRect(0, 10, 31, 23)) self.add_row_button.setText("") self.add_row_button.setObjectName("add_row_button") self.tableWidget = QtWidgets.QTableWidget(self.files_for_copy_widget) self.tableWidget.setGeometry(QtCore.QRect(0, 40, 311, 192)) self.tableWidget.setObjectName("tableWidget") self.tableWidget.setColumnCount(0) self.tableWidget.setRowCount(0) self.vertical_layout.addWidget(self.files_for_copy_widget) self.horizontalLayout_ = QtWidgets.QHBoxLayout() self.horizontalLayout_.setObjectName("horizontalLayout_") self.dir_line_edit_2 = QtWidgets.QLineEdit(self.verticalLayoutWidget) self.dir_line_edit_2.setObjectName("dir_line_edit_2") self.horizontalLayout_.addWidget(self.dir_line_edit_2) self.dir_button_dial_2 = QtWidgets.QPushButton(self.verticalLayoutWidget) self.dir_button_dial_2.setObjectName("dir_button_dial_2") self.horizontalLayout_.addWidget(self.dir_button_dial_2) self.vertical_layout.addLayout(self.horizontalLayout_) self.ini_label_2 = QtWidgets.QLabel(self.verticalLayoutWidget) self.ini_label_2.setObjectName("ini_label_2") self.vertical_layout.addWidget(self.ini_label_2) self.horizontalLayout_6 = QtWidgets.QHBoxLayout() self.horizontalLayout_6.setObjectName("horizontalLayout_6") self.ini_line_edit_2 = QtWidgets.QLineEdit(self.verticalLayoutWidget) self.ini_line_edit_2.setObjectName("ini_line_edit_2") self.horizontalLayout_6.addWidget(self.ini_line_edit_2) self.ini_button_dial_2 = QtWidgets.QPushButton(self.verticalLayoutWidget) self.ini_button_dial_2.setObjectName("ini_button_dial_2") self.horizontalLayout_6.addWidget(self.ini_button_dial_2) self.vertical_layout.addLayout(self.horizontalLayout_6) self.exe_label_2 = QtWidgets.QLabel(self.verticalLayoutWidget) self.exe_label_2.setObjectName("exe_label_2") self.vertical_layout.addWidget(self.exe_label_2) self.horizontalLayout_7 = QtWidgets.QHBoxLayout() self.horizontalLayout_7.setObjectName("horizontalLayout_7") self.exe_line_edit_2 = QtWidgets.QLineEdit(self.verticalLayoutWidget) self.exe_line_edit_2.setObjectName("exe_line_edit_2") self.horizontalLayout_7.addWidget(self.exe_line_edit_2) self.exe_button_dial_2 = QtWidgets.QPushButton(self.verticalLayoutWidget) self.exe_button_dial_2.setObjectName("exe_button_dial_2") self.horizontalLayout_7.addWidget(self.exe_button_dial_2) self.vertical_layout.addLayout(self.horizontalLayout_7) self.save_button = QtWidgets.QPushButton(self.verticalLayoutWidget) self.save_button.setObjectName("save_button") self.vertical_layout.addWidget(self.save_button) self.clear_log_button = QtWidgets.QPushButton(self.centralwidget) self.clear_log_button.setGeometry(QtCore.QRect(410, 420, 121, 31)) font = QtGui.QFont() font.setPointSize(12) self.clear_log_button.setFont(font) self.clear_log_button.setObjectName("clear_log_button") self.add_server_widget = QtWidgets.QWidget(self.centralwidget) self.add_server_widget.setGeometry(QtCore.QRect(20, 210, 211, 71)) self.add_server_widget.setMinimumSize(QtCore.QSize(211, 71)) self.add_server_widget.setMaximumSize(QtCore.QSize(211, 71)) self.add_server_widget.setObjectName("add_server_widget") self.verticalLayoutWidget_2 = QtWidgets.QWidget(self.add_server_widget) self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(0, 0, 211, 71)) self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2) self.verticalLayout_2.setContentsMargins(5, 0, 5, 0) self.verticalLayout_2.setSpacing(0) self.verticalLayout_2.setObjectName("verticalLayout_2") self.server_line_edit = QtWidgets.QLineEdit(self.verticalLayoutWidget_2) self.server_line_edit.setObjectName("server_line_edit") self.verticalLayout_2.addWidget(self.server_line_edit) self.save_servers_button = QtWidgets.QPushButton(self.verticalLayoutWidget_2) self.save_servers_button.setObjectName("save_servers_button") self.verticalLayout_2.addWidget(self.save_servers_button) self.update_client_button = QtWidgets.QPushButton(self.centralwidget) self.update_client_button.setGeometry(QtCore.QRect(380, 380, 171, 31)) font = QtGui.QFont() font.setPointSize(12) self.update_client_button.setFont(font) self.update_client_button.setObjectName("update_client_button") self.log_text_viewer = QtWidgets.QPlainTextEdit(self.centralwidget) self.log_text_viewer.setGeometry(QtCore.QRect(400, 80, 256, 192)) font = QtGui.QFont() font.setPointSize(8) self.log_text_viewer.setFont(font) self.log_text_viewer.setReadOnly(True) self.log_text_viewer.setPlainText("") self.log_text_viewer.setObjectName("log_text_viewer") self.file_from_to_widget = QtWidgets.QWidget(self.centralwidget) self.file_from_to_widget.setGeometry(QtCore.QRect(10, 290, 301, 131)) self.file_from_to_widget.setObjectName("file_from_to_widget") self.verticalLayoutWidget_3 = QtWidgets.QWidget(self.file_from_to_widget) self.verticalLayoutWidget_3.setGeometry(QtCore.QRect(-1, 9, 301, 121)) self.verticalLayoutWidget_3.setObjectName("verticalLayoutWidget_3") self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_3) self.verticalLayout_3.setContentsMargins(5, 5, 5, 5) self.verticalLayout_3.setObjectName("verticalLayout_3") self.horizontalLayout_1 = QtWidgets.QHBoxLayout() self.horizontalLayout_1.setObjectName("horizontalLayout_1") self.file_from = QtWidgets.QLineEdit(self.verticalLayoutWidget_3) self.file_from.setReadOnly(True) self.file_from.setClearButtonEnabled(False) self.file_from.setObjectName("file_from") self.horizontalLayout_1.addWidget(self.file_from) self.file_from_button = QtWidgets.QPushButton(self.verticalLayoutWidget_3) self.file_from_button.setObjectName("file_from_button") self.horizontalLayout_1.addWidget(self.file_from_button) self.verticalLayout_3.addLayout(self.horizontalLayout_1) self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.file_to = QtWidgets.QLineEdit(self.verticalLayoutWidget_3) self.file_to.setReadOnly(True) self.file_to.setClearButtonEnabled(False) self.file_to.setObjectName("file_to") self.horizontalLayout_2.addWidget(self.file_to) self.file_to_button = QtWidgets.QPushButton(self.verticalLayoutWidget_3) self.file_to_button.setObjectName("file_to_button") self.horizontalLayout_2.addWidget(self.file_to_button) self.verticalLayout_3.addLayout(self.horizontalLayout_2) self.save_box = QtWidgets.QDialogButtonBox(self.verticalLayoutWidget_3) self.save_box.setOrientation(QtCore.Qt.Horizontal) self.save_box.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.save_box.setCenterButtons(True) self.save_box.setObjectName("save_box") self.verticalLayout_3.addWidget(self.save_box) self.setting_widget.raise_() self.server_list.raise_() self.run_button.raise_() self.clear_log_button.raise_() self.add_server_widget.raise_() self.update_client_button.raise_() self.log_text_viewer.raise_() self.file_from_to_widget.raise_() MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 493, 21)) self.menubar.setObjectName("menubar") self.settings_menu = QtWidgets.QMenu(self.menubar) self.settings_menu.setObjectName("settings_menu") MainWindow.setMenuBar(self.menubar) self.menubar.addAction(self.settings_menu.menuAction()) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Смена сервера")) self.run_button.setText(_translate("MainWindow", "Пуск!")) self.dir_label_2.setText(_translate("MainWindow", "Локальная папка (КЭШ)")) self.dir_button_dial_2.setText(_translate("MainWindow", "Обзор")) self.ini_label_2.setText(_translate("MainWindow", "Путь к .ini файлу программы")) self.ini_button_dial_2.setText(_translate("MainWindow", "Обзор")) self.exe_label_2.setText(_translate("MainWindow", "Путь к .exe файлу программы")) self.exe_button_dial_2.setText(_translate("MainWindow", "Обзор")) self.save_button.setText(_translate("MainWindow", "Сохранить")) self.clear_log_button.setText(_translate("MainWindow", "Очистить")) self.save_servers_button.setText(_translate("MainWindow", "Сохранить")) self.update_client_button.setText(_translate("MainWindow", "Обновить клиента")) self.file_from.setPlaceholderText(_translate("MainWindow", "Откуда копировать?")) self.file_from_button.setText(_translate("MainWindow", "Обзор")) self.file_to.setPlaceholderText(_translate("MainWindow", "Куда копировать?")) self.file_to_button.setText(_translate("MainWindow", "Обзор")) self.settings_menu.setTitle(_translate("MainWindow", "Настройки"))
Для работы с формой сделал свой класс, в котором унаследовал Ui_MainWindow и QMainWindow.
Допустим мне нужно чтобы после закрытия “files_for_copy_widget”, в консоль вывелось“Hello World”
class MainForm(QMainWindow, Ui_MainWindow): def __init__(self): try: super(MainForm, self).__init__(parent = None) self.setupUi(self) self.file_from_to_widget.setVisible(False) self.setWindowIcon(QIcon(WINDOW_ICO)) #настройки контекстного меню self.server_list.setContextMenuPolicy(Qt.CustomContextMenu) self.server_list.customContextMenuRequested.connect(self.open_con_menu) #настройка меню self.client_files_to_copy = QAction('Файлы для копирования', self) self.client_files_to_copy.triggered.connect(self.choose_file_to_copy) self.settings_menu.addAction(self.client_files_to_copy) except Exception as e: print(e) # функция для отрисовки виджета def choose_file_to_copy(self): self.files_for_copy_widget.setWindowFlags(Qt.Dialog | Qt.WindowCloseButtonHint) self.files_for_copy_widget.setWindowModality(Qt.WindowModal) self.files_for_copy_widget.setWindowTitle('Список файлов для копирования') self.grid_ffc_widget = QGridLayout(self.files_for_copy_widget) self.grid_ffc_widget.setSpacing(3) self.grid_ffc_widget.addWidget(self.add_row_button, 1, 0, 1, 1) self.grid_ffc_widget.addWidget(self.edit_row_button, 1, 1, 1, 1) self.grid_ffc_widget.addWidget(self.delete_row_button, 1, 2, 1, 1) self.grid_ffc_widget.addWidget(self.tableWidget, 2, 0, 1, 3) self.files_for_copy_widget.setLayout(self.grid_ffc_widget) self.add_row_button.setIcon(QIcon(ADD_ROW_ICO)) self.edit_row_button.setIcon(QIcon(EDIT_ROW_ICO)) self.delete_row_button.setIcon(QIcon(DELETE_ROW_ICO)) table = self.tableWidget table.setColumnCount(2) table.setHorizontalHeaderLabels(['Откуда копировать','Куда копировать']) table.setColumnWidth(0, table.width() / 2) table.setColumnWidth(1, table.width() / 2) self.files_for_copy_widget.setVisible(True)