[Python自學] PyQT5-各種QDialog對話框


一、QDialog對話框

QDialog是所有對話框的父類,其子類包含:

1)QMessageBox

2)QColorDialog

3)QFileDialog

4)QFontDialog

5)QInputDialog

def initUI9(self):
    self.resize(200, 100)
    button = QPushButton("彈出對話框")
    button.clicked.connect(self.showDialog)

    layout = QVBoxLayout()
    layout.addWidget(button)

    self.setLayout(layout)

def showDialog(self):
    dialog = QDialog()
    btn = QPushButton('關閉', dialog)
    btn.clicked.connect(dialog.close)
    btn.move(50, 50)
    dialog.setWindowTitle('對話框')
    dialog.setWindowModality(Qt.ApplicationModal)  # 當對話框顯示時,主窗口的所有控件都不可用
    dialog.exec()  # 顯示對話框

效果:

二、QMessageBox對話框

QMessageBox是消息對話框,主要有一下幾種:

1)關於對話框

2)錯誤對話框

3)警告對話框

4)提問對話框

5)消息對話框

這些對話框主要有兩點不同:

1)顯示的對話框圖標可能不同

2)顯示的按鈕可能不同,但是一般可以設置想要的按鈕

1.關於對話框

QMessageBox.about(self, '關於', '這是一個關於對話框')

效果:

 可以看到,關於對話框顯示了窗口小圖標、大圖標、還有一個OK按鈕。

2.消息對話框

QMessageBox.information(self, '消息', '這是一個消息對話框', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

QMessageBox.Yes | QMessageBox.No 表示要顯示什么樣的按鈕,最后一個參數表示默認選中哪個按鈕。

效果:

3.警告對話框

QMessageBox.warning(self, '警告', '這是一個警告對話框', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

效果:

4.錯誤對話框

QMessageBox.critical(self, '錯誤', '這是一個錯誤對話框', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

效果:

5.提問對話框

QMessageBox.question(self, '提問', '這是一個提問對話框', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

效果:

三、QInputDialog對話框

QInputDialog用於幫助我們輸入數據。有一下幾種輸入對話框:

1)getItem,從ComboBox中選擇

2)getText,從LineEdit中獲取

3)getInt,從spinBox中獲取

1.getItem獲取值

def initUI9(self):
    self.resize(300, 200)
    self.button = QPushButton("輸入值")
    self.button.clicked.connect(self.inputDialog)

    self.lineEdit = QLineEdit()

    layout = QHBoxLayout()
    layout.addWidget(self.button)
    layout.addWidget(self.lineEdit)

    self.setLayout(layout)

def inputDialog(self):
    items = ['python', 'C', 'C++', 'JAVA', 'Ruby']
    text, ok = QInputDialog.getItem(self, '請選擇編程語言', '語言列表', items)
    if ok and text:
        self.lineEdit.setText(text)  # 在InputDialog中選擇的值設置到lineEdit中

效果:

2.getText獲取值

def inputDialog(self):
    text, ok = QInputDialog.getText(self, '文本輸入框', '輸入編程語言')
    if ok and text:
        self.lineEdit.setText(text)  # 在InputDialog中選擇的值設置到lineEdit中

效果:

3.getInt獲取值

def inputDialog(self):
    num, ok = QInputDialog.getInt(self, '整數輸入框', '輸入數字')
    if ok and num:
        self.lineEdit.setText(str(num))  # 在InputDialog中選擇的值設置到lineEdit中

效果:

四、QFontDialog字體對話框

def initUI(self):
    self.resize(300, 150)
    self.btn = QPushButton("選擇字體")
    self.btn.clicked.connect(self.popFontDialog)
    self.fontLabel = QLabel('hellop,測試字體例子')
    layout = QVBoxLayout()
    layout.addWidget(self.btn)
    layout.addWidget(self.fontLabel)
    self.setLayout(layout)
    # 添加窗口標題
    self.setWindowTitle("FontDialog控件Demo")

def popFontDialog(self):
    font, ok = QFontDialog.getFont()
    if ok:
        self.fontLabel.setFont(font)

效果:

五、QColorDialog顏色對話框

def initUI(self):
    self.resize(300, 150)
    self.btn = QPushButton("選擇顏色")
    self.btn.clicked.connect(self.popColorDialog)
    self.colorLabel = QLabel('hello,測試字體例子')
    layout = QVBoxLayout()
    layout.addWidget(self.btn)
    layout.addWidget(self.colorLabel)
    self.setLayout(layout)
    # 添加窗口標題
    self.setWindowTitle("ColorDialog控件Demo")

def popColorDialog(self):
    color = QColorDialog.getColor()
    p = QPalette()
    p.setColor(QPalette.WindowText, color)
    self.colorLabel.setPalette(p)

效果:

修改背景色:

def initUI(self):
    self.move(400,900)
    self.resize(300, 150)
    self.btn = QPushButton("選擇顏色")
    self.btn.clicked.connect(self.popColorDialog)
    self.colorLabel = QLabel('hello,測試字體例子')
    layout = QVBoxLayout()
    layout.addWidget(self.btn)
    layout.addWidget(self.colorLabel)
    self.setLayout(layout)
    # 添加窗口標題
    self.setWindowTitle("ColorDialog控件Demo")

def popColorDialog(self):
    color = QColorDialog.getColor()
    p = QPalette()
    p.setColor(QPalette.Window, color)
    self.colorLabel.setAutoFillBackground(True)  # 允許自動填充背景色
    self.colorLabel.setPalette(p)  # 修改背景色

效果:

六、QFileDialog文件對話框

def initUI(self):
    self.resize(300, 150)
    self.btn1 = QPushButton("打開圖片")
    self.btn1.clicked.connect(self.loadImageFile)
    self.imageLabel = QLabel()

    self.btn2 = QPushButton("打開文本")
    self.btn2.clicked.connect(self.loadTextFile)
    self.content = QTextEdit()

    layout = QVBoxLayout()
    layout.addWidget(self.btn1)
    layout.addWidget(self.imageLabel)
    layout.addWidget(self.btn2)
    layout.addWidget(self.content)

    self.setLayout(layout)
    # 添加窗口標題
    self.setWindowTitle("Demo")

# 打開圖片文件
def loadImageFile(self):
    fname, _ = QFileDialog.getOpenFileName(self, '打開文件', './images', '圖像文件 (*.jpg *.png) ')
    self.imageLabel.setPixmap(QPixmap(fname))

# 打開文本文件
def loadTextFile(self):
    dialog = QFileDialog()
    dialog.setFileMode(QFileDialog.AnyFile)
    dialog.setFilter(QDir.Files)
    if dialog.exec():
        filenames = dialog.selectedFiles()
        with open(filenames[0], 'r', encoding='utf-8') as f:
            data = f.read()
            self.content.setText(data)

效果:

 

===


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM