1. 程式人生 > 其它 >8.1 QDialog對話方塊控制元件基類

8.1 QDialog對話方塊控制元件基類

一、QDialog對話方塊控制元件基類

1.基本概念

  • 對話方塊控制元件主要用於短時間內的互動,分為模態和非模態兩種型別,其中模態對話方塊有分為視窗級別和應用程式級別兩種。
# 1用於短期任務或臨時互動:
   # 1.模態對話方塊:應用程式級別(exce(),需要關閉互動視窗之後才能操作其他視窗==模態)
   # 2.模態對話方塊:視窗級別(open()僅阻塞關聯視窗互動,不影響其他視窗的互動==模態)
   # 3.非模態對話方塊:show()
   # 模態(阻塞性);非模態(不阻塞)

# 2尺寸調整
    qd.setSizeGripEnabled(True)  # 控制元件右下角顯示

# 3槽函式
   # qd.accept()  # 接受
   # qd.reject()  # 取消
   # qd.done()  # 替代其他功能

# 4設定和獲取數值
   # qd.setResult(int)
   # qd.result()

# 5可用訊號
   # qd.accepted()
   # qd.finished()
   # qd.rejected()

2.程式碼

點選檢視程式碼
from PyQt5.Qt import *
import sys


class Window(QWidget) :
    def __init__(self) :
        super().__init__()
        self.setWindowTitle("QDialog對話方塊控制元件 - PyQt5中文網")
        self.resize(600, 500)
        self.func_list()

    def func_list(self) :
        self.func()

    def func(self) :
        # 四種對話方塊和一個日曆控制元件
        # QFontDialog
        # QColorDialog
        # QFileDialog
        # QInputDialog
        # QCalendarWidget
        '''
        # 用於短期任務或臨時互動:
        # 1.模態對話方塊:應用程式級別(exce(),需要關閉互動視窗之後才能操作其他視窗==模態)
        # 2.模態對話方塊:視窗級別(open()僅阻塞關聯視窗互動,不影響其他視窗的互動==模態)
        # 3.非模態對話方塊:show()
        # 模態(阻塞性);非模態(不阻塞)

        '''

        # 1模態演示
        qd = QDialog(self)
        #qd.exec()
        #qd.open()  # 不關聯的時候就能拖動

        #qd.setModal(True)  # 將非模態設定為模態視窗
        #qd.setWindowModality(Qt.ApplicationModal)  # 設定為視窗級別Qt.WindowModal,設定成應用程式級別Qt.ApplicationModal 只能用exec()輸出
        #qd.show()

        # 2尺寸調整
        qd.setSizeGripEnabled(True)  # 控制元件右下角顯示

        '''
        # 3槽函式
        # qd.accept()  # 接受
        # qd.reject()  # 取消
        # qd.done()  # 替代其他功能
        '''

        btn1 = QPushButton(qd)
        btn1.move(10, 10)
        btn1.setText('按鈕1')
        btn1.clicked.connect(lambda : qd.accept())  # 接受,返回值為1

        btn2 = QPushButton(qd)
        btn2.move(60, 60)
        btn2.setText('按鈕2')
        btn2.clicked.connect(lambda : qd.reject())  # 拒絕,返回值為0

        btn3 = QPushButton(qd)
        btn3.move(10, 100)
        btn3.setText('按鈕3')
        btn3.clicked.connect(lambda : qd.done(5))  # 返回值為5

        #print(qd.exec_())#輸出上面三個訊號的返回值

        '''
        # 4設定和獲取數值
        # qd.setResult(int)
        # qd.result()
        '''
        # btn1 = QPushButton(qd)
        # btn1.move(10, 100)
        # btn1.setText('按鈕1')
        # btn1.clicked.connect(lambda: qd.setResult(111))
        #
        # btn2 = QPushButton(qd)
        # btn2.move(60, 60)
        # btn2.setText('按鈕2')
        # btn2.clicked.connect(lambda: print(qd.result()))
        #
        # print(qd.exec_())
        '''
        # 5可用訊號
        # qd.accepted()
        # qd.finished()
        # qd.rejected()
        '''

        qd.accepted.connect(lambda: print('接受'))
        qd.rejected.connect(lambda: print('拒絕'))
        qd.finished.connect(lambda val: print('結束', val))
        qd.open()  # 觸發訊號


if __name__ == '__main__' :
    app = QApplication(sys.argv)
    window = Window()

    window.show()
    sys.exit(app.exec_())

3.效果