- class QDialog#
《QDialog》类是对话框窗口的基类。 更多…
继承自: 《QWizard》类, 《QProgressDialog》类, 《QMessageBox》类, 《QInputDialog》类, 《QFontDialog》类, 《QErrorMessage》类, 《QColorDialog》类, 《QPrintPreviewDialog》类, 《QPageSetupDialog》类, 《QAbstractPrintDialog》类, 《QPrintDialog》类, 《QFileDialog》类。
简介#
属性#
modalᅟ
- 是否在调用show()方法时以模态的形式弹出对话框sizeGripEnabledᅟ
- 是否启用了尺寸调整把手
方法#
def
__init__()
def
adjustPosition()
def
exec_()
def
result()
def
setModal()
def
setResult()
虚方法#
信号#
def
accepted()
def
finished()
def
rejected()
注意
此文档可能包含从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 标志)。注意
对话框的父关系 不 表示对话框将始终堆叠在父窗口之上。要确保对话框始终在顶部,请将其设置为模态。这同样适用于对话框本身的子窗口。为确保对话框的子窗口始终在对话框上方,请也将子窗口设置为模态。
模态对话框#
模态 对话框是阻塞同一应用程序中其他可见窗口输入的对话框。用于从用户请求文件名或用于设置应用程序首选项的对话框通常是模态的。对话框可以是应用程序模态(默认)或窗口模态。
当打开应用程序模态对话框时,用户必须完成与对话框的交互并关闭它,然后才能访问应用程序中的任何其他窗口。窗口模态对话框仅阻止对与对话框相关联的窗口的访问,允许用户继续使用应用程序中的其他窗口。
显示模态对话框最常见的方法是调用它的
exec()
函数。当用户关闭对话框时,exec()
将提供一个有用的返回值
。为了关闭对话框并返回适当的值,您必须将默认按钮(例如 OK 按钮)连接到accept()
槽,将取消按钮连接到reject()
槽。或者,您可以使用Accepted
或Rejected
调用done()
槽。另一种选择是调用
setModal
(true) 或setWindowModality()
,然后show()
。与exec()
不同,show()
立即返回控制权。调用setModal
(true) 尤其适用于进度对话框,用户必须能够与对话框进行交互,例如取消长时间运行的操作。如果您使用show()
和setModal
(true) 一起执行长时间操作,您必须在处理期间定期调用 QCoreApplication::processEvents() 以启用用户与对话框的交互。(参见QProgressDialog
。)无模态对话框#
一个 非模态 对话框是独立于同一应用程序中其他窗口运行的对话框。在文字处理程序中查找和替换对话框通常是无需模态的,以便用户可以与应用程序的主窗口和对话框进行交互。
使用
show()
显示无模态对话框,该函数立即将控制权返回给调用者。在与对话框隐藏之后调用
show()
函数,对话框将显示在原始位置。这是因为窗口管理器决定未由程序员明确放置的窗口的位置。为了保留已被用户移动的对话框的位置,请在您的closeEvent()
处理程序中保存其位置,然后在显示它之前将其移动到该位置。Esc 键
如果用户在对话框中按下 Esc 键,将调用
reject()
方法。这将导致窗口关闭:关闭事件不能被忽略。扩展性
扩展性是指以两种方式显示对话框:一种是部分对话框,显示最常用的选项;另一种是完整对话框,显示所有选项。通常,可扩展的对话框最初会以部分对话框的形式显示,但带有更多切换按钮。如果用户按下更多按钮,对话框将被展开。
返回值(模态对话框)
模态对话框通常用于需要返回值的情况,例如指示用户是否按下了 OK 或 Cancel。可以通过调用
accept()
或reject()
插槽来关闭对话框,并且exec()
将根据情况返回Accepted
或Rejected
。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
,对话框将无法被用户调整大小,当扩展被隐藏时,对话框将自动缩小。另请参阅
- class DialogCode#
(继承自
enum.IntEnum
)模式对话框返回的值。常量
描述
QDialog.Accepted
QDialog.Rejected
注意
可以在使用
from __feature__ import true_property
时直接使用属性,否则通过访问函数使用。- property modalᅟ: bool#
此属性保留
show()
应将对话框弹出为模式还是非模式。默认情况下,此属性为
false
,且show()
将对话框弹出为非模式。将此属性设置为true等价于将windowModality
设置为Qt::ApplicationModal。exec()
属性的值被忽略,并且总是以模态对话框的形式弹出。另请参阅
- 访问函数
- 属性sizeGripEnabledᅟ: bool#
此属性用于设置是否启用尺寸调整。
当此属性启用时,
QSizeGrip
将放置在对话框的右下角。默认情况下,尺寸调整被禁用。- __init__([parent=None[, f=Qt.WindowFlags()]])#
- 参数:
parent –
QWidget
f – 组合
WindowType
构建一个带有父对象
parent
的对话框。对话框始终是一个顶级小部件,但是如果有父对象,其默认位置是位于父对象顶部中央。它也将共享父对象的任务栏条目。
将小部件标志
f
传递给QWidget
构造函数。例如,如果您不希望在对话框标题栏中显示“这是什么”按钮,请将 Qt::WindowTitleHint | Qt::WindowSystemMenuHint 传递给f
。另请参阅
- accept()#
隐藏模态对话框,并将结果代码设置为
Accepted
。- accepted()#
当对话框被用户接受或通过调用
accept()
或者done()
并以Accepted
参数进行时,会发射此信号。请注意,此信号在隐藏对话框使用
hide()
或setVisible
(false) 时不会发射。这包括在对话框可见时删除对话框。另请参阅
- done(arg__1)#
- 参数:
arg__1 – int
关闭对话框并将其结果代码设置为
r
。当finished()
信号发射时,将发射r
;如果r
为Accepted
或Rejected
,则分别发射accepted()
或rejected()
信号。如果使用
exec()
显示此对话框,done()
也会导致本地事件循环结束,并且exec()
返回r
。与
close()
一样,如果设置了 Qt::WA_DeleteOnClose 标志,done()
会删除对话框。如果对话框是应用程序的主小部件,应用程序将终止。如果对话框是最后关闭的窗口,则发射 QGuiApplication::lastWindowClosed() 信号。- exec()#
- 返回类型:
int
以模态对话框的形式显示对话框,阻塞用户关闭它之前。函数返回
DialogCode
结果。如果对话框是应用程序模态对话框,在关闭对话框之前,用户无法与应用程序中的任何其他窗口进行交互。如果对话框是窗口模态对话框,在对话框打开期间,只有与父窗口的交互被阻塞。默认情况下,对话框是应用程序模态。
注意
避免使用此函数;相反,使用
open()
。与exec()不同,open()
是异步的,不启动另一个事件循环。这可以防止一系列危险错误的产生(例如,在通过exec()打开对话框时删除对话框的父级)。当使用open()
时,您可以通过连接到QDialog
的finished()
信号来接收对话框关闭的通知。- exec_()#
- 返回类型:
int
- finished(result)#
- 参数:
结果 - int
当对话框的
result
代码被设置时,无论是用户设置还是通过调用done()
,accept()
,或reject()
时,会发出此信号。请注意,此信号在隐藏对话框使用
hide()
或setVisible
(false) 时不会发射。这包括在对话框可见时删除对话框。另请参阅
- isSizeGripEnabled()#
- 返回类型:
bool
属性
sizeGripEnabledᅟ
的获取器。- open()#
以
window modal dialog
的形式显示对话框,并立即返回。- reject()#
隐藏模态对话框并将结果代码设置为
Rejected
。- rejected()#
当对话框因用户或调用
reject()
或以done()
方式,并携带Rejected
参数被拒绝时,会发出此信号。请注意,此信号在隐藏对话框使用
hide()
或setVisible
(false) 时不会发射。这包括在对话框可见时删除对话框。另请参阅
- result()#
- 返回类型:
int
通常返回模态对话框的结果代码,
Accepted
或Rejected
。注意
当在
QMessageBox
实例上调用时,返回值是StandardButton
枚举的值。如果对话框是通过 Qt::WA_DeleteOnClose 属性构造的,不要调用此函数。
另请参阅
- setModal(modal)#
- 参数:
modal - bool
属性
modalᅟ
的设置器。- setResult(r)#
- 参数:
r - int
将模态对话框的结果代码设置为
i
。- setSizeGripEnabled(arg__1)#
- 参数:
arg__1 - bool
另请参阅
属性
sizeGripEnabledᅟ
的设置器。