使用PySide(Qt)我试图从模态窗口打开一个非模态窗口。
模态窗口实际上等待强制性答案,其上有一个图标,弹出一个关于用户可以回答的帮助窗口。
在模态父实际关闭之前,我无法找到关闭(非模态)帮助窗口的方法。
有没有办法将子窗口设置为模态,同时仍然保持其父模态?
答案 0 :(得分:3)
在下面的示例中,我将向您展示如何在模式对话框关闭之前或之后从模式对话框中关闭另一个窗口。这不是很困难,只需要在另一个窗口(您的帮助窗口)上调用close
。
示例:
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_()
我有一个带按钮的主窗口。单击该按钮时,将启动模态对话框(QDialog
的实例),但同时会显示无模式窗口(为简单起见,只显示QLabel
)。在模态对话框中还有一个按钮,如果单击该按钮,则关闭无模式窗口。在执行对话框后,关闭无模式窗口(以防万一没有按下按钮)。
在那里你看到关闭另一个窗口只需要调用close
,但我也设置了一个层次结构。模态对话框是主窗口的子窗口,无模式(帮助)窗口是模态对话框的子窗口。没有它,它可能也不会起作用。