PyQt5之QDialog对象

简介

是对话窗口的基类,对话窗口是顶级窗口,主要用于短期任务和与用户的简短通信。
继承自QWidget

创建

QDialog(parent: QWidget = None, flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags())
# 代码示例
window = QWidget()

qd = QDialog(window)
qd.resize(200, 100)
qd.open()

PyQt5之QDialog对象_第1张图片

模态设置

在介绍模态设置之前首先认识什么是“模态”;
模态对话框:模态对话框分为应用级(默认值)和窗口级,应用级模态对话框,当该种模态的对话框出现时,用户必须首先对对话框进行交互,直到关闭对话框,然后才能访问程序中其他的窗口,其使用exec()进行窗口展示;

# 演示代码
window = QWidget()

qd = QDialog()
qd.resize(200, 100)
qd.exec()

window.show()

PyQt5之QDialog对象_第2张图片
窗口级模态对话框,该模态仅仅阻塞与对话框关联的窗口,但是依然允许用户与程序中其它窗口交互,其使用open()进行窗口展示;

# 演示代码
window = QWidget()

qd = QDialog(window)
qd.resize(200, 100)
qd.open()

PyQt5之QDialog对象_第3张图片
非模态对话框:不会阻塞与对话框关联的窗口以及与其他窗口进行交互,使用show()进行窗口展示,可以结合使用方法setModal(True)来实现;

# 演示代码
window = QWidget()

qd = QDialog(window)
qd.resize(200, 100)
qd.show()

window.show()

PyQt5之QDialog对象_第4张图片

# 通过setModal(bool)方法设置模态
window = QWidget()

qd = QDialog(window)
qd.resize(200, 100)
qd.setModal(True)

qd.show()

window.show()

PyQt5之QDialog对象_第5张图片

窗口弹出

# 窗口的弹出有三种方式
open()
exec()
show()

是否展示尺寸调整控件

# 是否展示尺寸调整控件
setSizeGripEnabled(bool)

PyQt5之QDialog对象_第6张图片

常用操作槽

常用的操作槽accept()、reject()、done(int r)

# 演示代码
window = QWidget()

qd = QDialog(window)
qd.setWindowTitle("对话框")
qd.resize(300, 300)

btn1 = QPushButton(qd)
btn1.setText("accept")
btn1.move(100, 50)
btn1.clicked.connect(lambda: qd.accept())

btn2 = QPushButton(qd)
btn2.setText("reject")
btn2.move(100, 100)
btn2.clicked.connect(lambda: qd.reject())

btn3 = QPushButton(qd)
btn3.setText("done")
btn3.move(100, 150)
btn3.clicked.connect(lambda: qd.done(2))

qd.show()

运行以上代码展示的效果如下所示:

PyQt5之QDialog对象_第7张图片
当我们选择点击以上的三个按钮所触发的效果都是一样的,都会关闭对话框,他们的区别在于他们退出时返回的值不相同;
如何获得其退出是返回的值呢?这里使用exec()的展示方法,因为这个展示方法会在对话框将值返回出来;

# 演示代码
window = QWidget()

qd = QDialog(window)
qd.setWindowTitle("对话框")
qd.resize(300, 300)

btn1 = QPushButton(qd)
btn1.setText("accept")
btn1.move(100, 50)
btn1.clicked.connect(lambda: qd.accept())

btn2 = QPushButton(qd)
btn2.setText("reject")
btn2.move(100, 100)
btn2.clicked.connect(lambda: qd.reject())

btn3 = QPushButton(qd)
btn3.setText("done")
btn3.move(100, 150)
btn3.clicked.connect(lambda: qd.done(2))

result = qd.exec()
print(result)
# 点击accept、reject、done按钮时返回的值分别是1、0、2

我们很容易想到通过返回数值进行不同的操作;

设置和获取数值

和以上的done()槽函数相同,直接设置返回值,但是不会关闭对话框;

# 代码演示
window = QWidget()

qd = QDialog(window)
qd.setWindowTitle("对话框")
qd.resize(300, 300)

btn1 = QPushButton(qd)
btn1.setText("accept")
btn1.move(100, 50)
btn1.clicked.connect(lambda: qd.accept())

btn2 = QPushButton(qd)
btn2.setText("reject")
btn2.move(100, 100)
btn2.clicked.connect(lambda: qd.reject())

btn3 = QPushButton(qd)
btn3.setText("done")
btn3.move(100, 150)
btn3.clicked.connect(lambda: qd.done(2))

btn4 = QPushButton(qd)
btn4.setText("setResult")
btn4.move(100, 200)
btn4.clicked.connect(lambda: qd.setResult(100))

btn5 = QPushButton(qd)
btn5.setText("Result")
btn5.move(100, 250)
btn5.clicked.connect(lambda: print(qd.result()))

PyQt5之QDialog对象_第8张图片

信号

# 拥有以下几个信号
accepted()
finished(int result)
rejected()
# 代码演示
window = QWidget()

qd = QDialog(window)
qd.setWindowTitle("对话框")
qd.resize(300, 300)

btn1 = QPushButton(qd)
btn1.setText("accept")
btn1.move(100, 50)
btn1.clicked.connect(lambda: qd.accept())

btn2 = QPushButton(qd)
btn2.setText("reject")
btn2.move(100, 100)
btn2.clicked.connect(lambda: qd.reject())

btn3 = QPushButton(qd)
btn3.setText("done")
btn3.move(100, 150)
btn3.clicked.connect(lambda: qd.done(2))

btn4 = QPushButton(qd)
btn4.setText("setResult")
btn4.move(100, 200)
btn4.clicked.connect(lambda: qd.setResult(100))

btn5 = QPushButton(qd)
btn5.setText("Result")
btn5.move(100, 250)
btn5.clicked.connect(lambda: print(qd.result()))

qd.accepted.connect(lambda: print("点击了accept按钮"))
# 点击了accept按钮
# 点击了finish按钮
qd.rejected.connect(lambda: print("点击了reject按钮"))
# 点击了reject按钮
# 点击了finish按钮
qd.finished.connect(lambda: print("点击了finish按钮"))
# 点击了finish按钮

result = qd.exec()
# print(result)

window.show()

你可能感兴趣的:(PyQt,python,pyqt,gui)