PySide6.QtWidgets.QDialog

class QDialog

QDialog 类是对话框窗口的基类。更多

PySide6.QtWidgets.QDialog 的继承图

继承自: QWizard, QProgressDialog, QMessageBox, QInputDialog, QFontDialog, QErrorMessage, QColorDialog, QPrintPreviewDialog, QPageSetupDialog, QAbstractPrintDialog, QPrintDialog, QFileDialog

概要

属性

方法

虚拟方法

信号

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

对话框窗口是一个顶级窗口,主要用于短期任务和与用户的简短交流。QDialogs可以是模态的或无模态的。QDialogs可以提供return value,并且它们可以有default buttons。QDialogs还可以在其右下角有一个QSizeGrip,使用setSizeGripEnabled()

请注意,QDialog(以及任何其他类型为Qt::Dialog的小部件)在使用父部件时与Qt中的其他类略有不同。对话框始终是一个顶级部件,但如果它有父部件,其默认位置是在父部件的顶级部件(如果它本身不是顶级部件)的顶部居中。它还将共享父部件的任务栏条目。

使用setParent()函数的重载来更改QDialog小部件的所有权。此函数允许您显式设置重新父级化小部件的窗口标志;使用重载函数将清除指定小部件窗口系统属性的窗口标志(特别是它将重置Qt::Dialog标志)。

注意

对话框的父级关系并不意味着对话框将始终堆叠在父窗口的顶部。为了确保对话框始终位于顶部,请将对话框设置为模态。这也适用于对话框本身的子窗口。为了确保对话框的子窗口始终位于对话框的顶部,请将子窗口也设置为模态。

无模式对话框

一个非模态对话框是一个独立于同一应用程序中其他窗口操作的对话框。文字处理器中的查找和替换对话框通常是非模态的,以允许用户同时与应用程序的主窗口和对话框进行交互。

无模式对话框使用show()显示,它会立即将控制权返回给调用者。

如果你在隐藏对话框后调用show()函数,对话框将显示在其原始位置。这是因为窗口管理器决定那些没有被程序员明确放置的窗口的位置。为了保留用户移动过的对话框的位置,在你的closeEvent()处理程序中保存其位置,然后在再次显示之前将对话框移动到该位置。

默认按钮

对话框的默认按钮是当用户按下Enter(Return)键时被按下的按钮。此按钮用于表示用户接受对话框的设置并希望关闭对话框。使用setDefault()isDefault()autoDefault()来设置和控制对话框的默认按钮。

退出键

如果用户在对话框中按下 Esc 键,reject() 将被调用。这将导致窗口关闭:关闭事件无法被忽略。

可扩展性

可扩展性是指能够以两种方式显示对话框:一种是显示最常用选项的部分对话框,另一种是显示所有选项的完整对话框。通常,可扩展对话框最初会显示为部分对话框,但带有一个“更多”切换按钮。如果用户按下“更多”按钮,对话框将展开。

返回值(模态对话框)

模态对话框通常用于需要返回值的情况,例如指示用户是按下了“确定”还是“取消”。可以通过调用accept()reject()槽来关闭对话框,并且exec()将返回AcceptedRejected作为适当的结果。exec()调用返回对话框的结果。如果对话框尚未被销毁,结果也可以通过result()获得。

为了修改对话框的关闭行为,你可以重新实现函数 accept()reject()done()。只有在需要保留对话框的位置或覆盖标准的关闭或拒绝行为时,才应重新实现 closeEvent() 函数。

代码示例

一个模态对话框:

def countWords(self):

    dialog = WordCountDialog(self)
    dialog.setWordCount(document().wordCount())
    dialog.exec()

一个非模态对话框:

def find(self):

    if not findDialog:
        findDialog = FindDialog(self)
        findDialog.findNext.connect(
                self.findNext)

    findDialog.show()
    findDialog.raise()
    findDialog.activateWindow()

带有扩展的对话框:

mainLayout.setSizeConstraint(QLayout.SetFixedSize)
findButton = QPushButton(tr("Find"))
moreButton = QPushButton(tr("More..."))
moreButton.setCheckable(True)
extension = ExtendedControls()
mainLayout.addWidget(extension)
extension.hide()
moreButton.toggled.connect(extension.setVisible)

通过将对话框布局的sizeConstraint属性设置为SetFixedSize,对话框将无法由用户调整大小,并且在扩展隐藏时会自动缩小。

另请参阅

QDialogButtonBox QTabWidget QWidget QProgressDialog 标准对话框示例

class DialogCode

(继承自 enum.IntEnum) 模态对话框返回的值。

常量

描述

QDialog.Accepted

QDialog.Rejected

注意

当使用from __feature__ import true_property时,属性可以直接使用,否则通过访问器函数使用。

property modalᅟ: bool

此属性决定show()是否应将对话框弹出为模态或无模态。

默认情况下,此属性为 false,并且 show() 以非模态方式弹出对话框。将此属性设置为 true 相当于将 windowModality 设置为 Qt::ApplicationModal。

exec() 忽略此属性的值,并始终以模态形式弹出对话框。

Access functions:
property sizeGripEnabledᅟ: bool

此属性表示是否启用了尺寸调整手柄。

当启用此属性时,QSizeGrip 将放置在对话框的右下角。默认情况下,大小调整手柄是禁用的。

Access functions:
__init__([parent=None[, f=Qt.WindowFlags()]])
Parameters:

使用父级 parent 构建一个对话框。

对话框始终是一个顶级小部件,但如果它有父级,其默认位置是在父级顶部居中。它还将共享父级的任务栏条目。

小部件标志 f 被传递给 QWidget 构造函数。例如,如果您不希望在对话框的标题栏中显示“这是什么”按钮,可以在 f 中传递 Qt::WindowTitleHint | Qt::WindowSystemMenuHint。

另请参阅

setWindowFlags()

accept()

隐藏模态对话框并将结果代码设置为Accepted

另请参阅

reject() done()

accepted()

当对话框被用户接受或通过调用accept()done()并带有Accepted参数时,会发出此信号。

请注意,当使用hide()setVisible (false)隐藏对话框时,不会发出此信号。这包括在对话框可见时删除它。

另请参阅

finished() rejected()

adjustPosition(arg__1)
Parameters:

arg__1QWidget

done(r)
Parameters:

r – 整数

关闭对话框并将其结果代码设置为rfinished()信号将发出r;如果rAcceptedRejected,则accepted()rejected()信号也将分别发出。

如果此对话框通过exec()显示,done()也会导致本地事件循环结束,并且exec()返回r

close() 一样,如果设置了 Qt::WA_DeleteOnClose 标志,done() 会删除对话框。如果对话框是应用程序的主部件,应用程序将终止。如果对话框是最后一个关闭的窗口,则会发出 QGuiApplication::lastWindowClosed() 信号。

exec()
Return type:

整数

将对话框显示为模态 对话框,直到用户关闭它为止。该函数返回一个DialogCode结果。

如果对话框是应用程序模态的,用户在关闭对话框之前无法与同一应用程序中的任何其他窗口进行交互。如果对话框是窗口模态的,只有在对话框打开时,与父窗口的交互会被阻止。默认情况下,对话框是应用程序模态的。

注意

避免使用此函数;相反,请使用open()。与exec()不同,open()是异步的,并且不会旋转额外的事件循环。这可以防止一系列危险的错误发生(例如,在对话框通过exec()打开时删除对话框的父级)。使用open()时,您可以连接到QDialogfinished()信号,以便在对话框关闭时收到通知。

exec_()
Return type:

整数

finished(result)
Parameters:

结果 – int

当对话框的result代码被设置时,无论是通过用户操作还是通过调用done()accept()reject(),都会发出此信号。

请注意,当使用hide()setVisible (false)隐藏对话框时,不会发出此信号。这包括在对话框可见时删除它。

另请参阅

accepted() rejected()

isSizeGripEnabled()
Return type:

布尔

属性 sizeGripEnabledᅟ 的获取器。

open()

将对话框显示为window modal dialog,并立即返回。

reject()

隐藏模态对话框并将结果代码设置为Rejected

另请参阅

accept() done()

rejected()

当对话框被用户拒绝或通过调用reject()done()并带有Rejected参数时,会发出此信号。

请注意,当使用hide()setVisible (false)隐藏对话框时,不会发出此信号。这包括在对话框可见时删除它。

另请参阅

finished() accepted()

result()
Return type:

整数

通常返回模态对话框的结果代码,AcceptedRejected

注意

当在QMessageBox实例上调用时,返回值是StandardButton枚举的一个值。

如果对话框是使用Qt::WA_DeleteOnClose属性构造的,请不要调用此函数。

另请参阅

setResult()

setModal(modal)
Parameters:

modal – 布尔值

属性 modalᅟ 的设置器。

setResult(r)
Parameters:

r – 整数

将模态对话框的结果代码设置为 i

注意

我们建议您使用由DialogCode定义的值之一。

另请参阅

result()

setSizeGripEnabled(arg__1)
Parameters:

arg__1 – 布尔值

另请参阅

isSizeGripEnabled()

属性 sizeGripEnabledᅟ 的设置器。