如何关闭模态 window 的非模态子 window?

How to close non-modal child window of modal window?

使用 PySide (Qt) 我正在尝试从模态 window.

打开非模态 window

模态 window 实际上是在等待强制回答,上面有一个图标可以弹出关于用户可以回答什么的帮助 window。

我找不到在模态父级实际关闭之前关闭(非模态)帮助的方法window。

有没有办法将子 window 设置为模态,同时仍保持其父模态?

在下面的示例中,我向您展示了如何在模态对话框关闭之前或之后从模态对话框中关闭另一个 window。这不是很难,只需要在另一个window上调用close(你的帮助window)。

示例:

from PySide import QtCore, QtGui

def start_modal_dialog():
    modal_dlg = QtGui.QDialog(main_window) # a modal dialog
    modal_dlg.setWindowTitle('Modal Dialog')
    modal_dlg.setFixedSize(200, 200)

    modeless_help_window = QtGui.QLabel('Explanations', modal_dlg, QtCore.Qt.Window) # a modeless help window
    modeless_help_window.setWindowTitle('Modeless Help Window')
    modeless_help_window.setFixedSize(200, 200)
    modeless_help_window.show()

    help_window_close_button = QtGui.QPushButton('Close Help window', modal_dlg)
    help_window_close_button.clicked.connect(modeless_help_window.close)

    modal_dlg.exec_() # execute the dialog

    modeless_help_window.close() # close the modeless help window after the modal dialog window is closed

app = QtGui.QApplication([]) # create app

main_window = QtGui.QMainWindow() # main window
main_window.setWindowTitle('Main Window')
main_window.setFixedSize(200, 200)
dlg_start_button = QtGui.QPushButton('Start Modal dialog', main_window) # add a button
dlg_start_button.clicked.connect(start_modal_dialog) # which shows the dialog
main_window.show()

app.exec_()

我有一个带按钮的主 window。单击该按钮时,将启动模式对话框(QDialog 的实例),但同时会显示无模式的 window(为简单起见,仅显示 QLabel)。在模式对话框中还有一个按钮,如果单击它,无模式 window 将关闭。同样在执行对话框后,无模式 window 关闭(以防未按下按钮)。

你看到关闭另一个 window 只需要调用 close,但我还设置了一个层次结构。模式对话框是主 window 的子项,无模式(帮助)window 是模式对话框的子项。没有它,它可能无法正常工作。