【问题标题】:How to close non-modal child window of modal window?如何关闭模态窗口的非模态子窗口?
【发布时间】:2015-12-08 15:22:21
【问题描述】:

使用 PySide (Qt) 我正在尝试从模式窗口打开一个非模式窗口。

模态窗口实际上是在等待强制回答,上面有一个图标,会弹出一个帮助窗口,提示用户可以回答什么。

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

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

【问题讨论】:

  • 你能给我们看一些代码吗?
  • 实际上,“有没有办法将子窗口设置为模态,同时仍保持其父模态?”是什么意思?

标签: qt modal-dialog pyside


【解决方案1】:

在下面的示例中,我将向您展示如何在模态对话框关闭之前或之后从模态对话框中关闭另一个窗口。这不是很困难,只需要在另一个窗口(您的帮助窗口)上调用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,但我也设置了一个层次结构。模式对话框是主窗口的子窗口,无模式(帮助)窗口是模式对话框的子窗口。没有它,它可能无法正常工作。

【讨论】:

  • @Marcvs 谢谢。很高兴听到。如果您愿意并且答案解决了您的问题,您也可以将其标记为已接受(分数旁边的复选标记)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多