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()

在這裏插入圖片描述

模態設置

在介紹模態設置之前首先認識什麼是“模態”;
模態對話框:模態對話框分爲應用級(默認值)和窗口級,應用級模態對話框,當該種模態的對話框出現時,用戶必須首先對對話框進行交互,直到關閉對話框,然後才能訪問程序中其他的窗口,其使用exec()進行窗口展示;

# 演示代碼
window = QWidget()

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

window.show()

在這裏插入圖片描述
窗口級模態對話框,該模態僅僅阻塞與對話框關聯的窗口,但是依然允許用戶與程序中其它窗口交互,其使用open()進行窗口展示;

# 演示代碼
window = QWidget()

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

在這裏插入圖片描述
非模態對話框:不會阻塞與對話框關聯的窗口以及與其他窗口進行交互,使用show()進行窗口展示,可以結合使用方法setModal(True)來實現;

# 演示代碼
window = QWidget()

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

window.show()

在這裏插入圖片描述

# 通過setModal(bool)方法設置模態
window = QWidget()

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

qd.show()

window.show()

在這裏插入圖片描述

窗口彈出

# 窗口的彈出有三種方式
open()
exec()
show()

是否展示尺寸調整控件

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

在這裏插入圖片描述

常用操作槽

常用的操作槽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()

運行以上代碼展示的效果如下所示:

在這裏插入圖片描述
當我們選擇點擊以上的三個按鈕所觸發的效果都是一樣的,都會關閉對話框,他們的區別在於他們退出時返回的值不相同;
如何獲得其退出是返回的值呢?這裏使用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()))

在這裏插入圖片描述

信號

# 擁有以下幾個信號
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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章