PyQt5学习笔记13 - QDialog & QMessageBox

前文

PyQt5学习笔记8 - QTextEdit
PyQt5学习笔记9 - QPushButton & QRadioButton
PyQt5学习笔记10 - QCheckBox & QComboBox
PyQt5学习笔记11 - QSpinBox & QSlider
PyQt5学习笔记12 - QMenubar & QStatusBar

QDialog

为了更好地实现人机交互,比如Windows和Linux等系统均会提供一系列的标准对话框来完成特定场景下的功能,如选择字号大小,字体颜色等。在PyQt5中定义了一系列的标准对话框,让使用者能够方便和快捷地通过各个类完成字号大小,字体颜色以及文件的选择等。

QDialog类的子类主要有QMessageBox, QFileDialog, QFontDialog, QInputDialog等。

QDialog类的常用方法

from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QMainWindow, QPushButton, QDialog, QApplication class DialogDemo(QMainWindow): def __init__(self, parent=None): super(DialogDemo, self).__init__(parent) self.setWindowTitle('DialogDemo') self.resize(400, 240) self.button1 = QPushButton(self) self.button1.setText('弹出对话框') self.button1.move(50, 50) self.button1.clicked.connect(self.show_dialog) @staticmethod def show_dialog(): dialog = QDialog() button2 = QPushButton("OK", dialog) button2.move(50, 50) dialog.setWindowTitle('Dialog For OK') dialog.setWindowModality(Qt.ApplicationModal) dialog.exec() if __name__ == '__main__': app = QApplication(sys.argv) demo = DialogDemo() demo.show() sys.exit(app.exec()) infromation(parent, title, text, buttons, defaultButton) 弹出消息对话框,各参数解释如下:
- parent, 指定父容器
- title, 对话框标题
- text, 对话框文本
- buttons, 多个标准按钮,默认为OK按钮
- defaultButton, 默认选中的按钮,默认是第一个标准按钮 question(parent, title, text, buttons, defaultButton) 弹出问答对话框 warning(parent, title, text, buttons, defaultButton) 弹出警告对话框 ctitical(parent, title, text, buttons, defaultButton) 弹出严重错误对话框 about(parent, title, text) 弹出关于对话框 setTitle() setText() 设置消息正文 setIcon() 设置弹出对话框的图片 self.button = QPushButton(self) self.button.setText('点击弹出消息弹窗') self.button.clicked.connect(self.show_message) def show_message(self): reply = QMessageBox.information(self, 'Title', 'Message content', QMessageBox.Yes | QMessageBox.No, QMessageBox.No) print(reply) if __name__ == '__main__': app = QApplication(sys.argv) demo = MessageDemo() demo.show() sys.exit(app.exec())

QInputDialog

QInputDialog控件是一个标准对话框,由一个文本框和两个按钮(OK 按钮和Cancel 按钮)组成。当用户单击OK按钮或按Enter键后,在父窗口可以手机通过QInputDialog控件输入的信息。QInputDialog控件是QDialog标准对话框的一部分。

QInputDialog 常用方法

import sys
from PyQt5.QtWidgets import QWidget, QFormLayout, QPushButton, QLineEdit, QInputDialog, QApplication
class InputDialogDemo(QWidget):
    def __init__(self, parent=None):
        super(InputDialogDemo, self).__init__(parent)
        layout = QFormLayout()
        self.button_1 = QPushButton('获得列表里的选项')
        self.line_1 = QLineEdit()
        self.button_2 = QPushButton('获得字符串')
        self.line_2 = QLineEdit()
        self.button_3 = QPushButton('获得整数')
        self.line_3 = QLineEdit()
        self.button_1.clicked.connect(self.get_item)
        self.button_2.clicked.connect(self.get_text)
        self.button_3.clicked.connect(self.get_int)
        layout.addRow(self.button_1, self.line_1)
        layout.addRow(self.button_2, self.line_2)
        layout.addRow(self.button_3, self.line_3)
        self.setLayout(layout)
        self.setWindowTitle('InputDialogDemo')
    def get_item(self):
        items = ('C', 'C++', 'Java', 'Python')
        item, ok = QInputDialog.getItem(self, 'Select Input Dialog', 'language list', items, 0, False)
        if ok and items:
            self.line_1.setText(item)
    def get_text(self):
        text, ok = QInputDialog.getText(self, 'Text Input Dialog', 'Input Name')
        if ok:
            self.line_2.setText(str(text))
    def get_int(self):
        num, ok = QInputDialog.getInt(self, 'Integer Input Dialog', 'Input Number')
        if ok:
            self.line_3.setText(str(num))
if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = InputDialogDemo()
    demo.show()
    sys.exit(app.exec())

QFontDialog

QFontDialog 控件时一个常用的字体选择对话框,可以让用户选择所显示文本的字号大小,样式和格式。QFontDialog是QDialog标准对话框的一部分。使用QFontDialog类的静态方法getFont(), 可以从字体选择对话框中选择文本的显示字号大小,样式和格式。

QFontDialog的使用

import sys
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QFontDialog, QLabel, QApplication
class FontDialogDemo(QWidget):
    def __init__(self, parent=None):
        super(FontDialogDemo, self).__init__(parent)
        self.setWindowTitle('FontDialogDemo')
        layout = QVBoxLayout()
        self.button_font = QPushButton("Choose Font")
        self.button_font.clicked.connect(self.get_font)
        self.label_font = QLabel("Font Demo")
        layout.addWidget(self.button_font)
        layout.addWidget(self.label_font)
        self.setLayout(layout)
    def get_font(self):
        font, ok = QFontDialog.getFont()
        if ok:
            self.label_font.setFont(font)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = FontDialogDemo()
    demo.show()
    sys.exit(app.exec())

QFileDialog

QFileDialog 是用于打开和保存文件的标准对话框。QFileDialog 类继承自QDialog类。

QFileDialog在打开文件的时可以使用文件过滤器,用于显示指定扩展名的文件。

QFileDialog 常用方法

setFileMode 可以选择的文件类型,通常有
- QFileDialog.AnyFile, 任何文件
- QFileDialog.ExistingFile, 已存在的文件
- QFileDialog.Directory, 文件目录
- QFileDialog.ExistingFiles, 已经存在的多个文件 setFilter() 设置过滤器,只显示过滤器允许的文件类型 from PyQt5.QtCore import QDir from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QLabel, QTextEdit, QFileDialog, QApplication class FileDialog(QWidget): def __init__(self, parent=None): super(FileDialog, self).__init__(parent) layout = QVBoxLayout() self.button = QPushButton('加载图片') self.button.clicked.connect(self.get_file) self.label = QLabel('') self.button_1 = QPushButton('加载文本文件') self.button_1.clicked.connect(self.get_files) self.text_edit = QTextEdit() layout.addWidget(self.button) layout.addWidget(self.label) layout.addWidget(self.button_1) layout.addWidget(self.text_edit) self.setLayout(layout) def get_file(self): file_name, _ = QFileDialog.getOpenFileName(self, 'Open file', 'C:\\', 'Image File (*.jpg *.gif)') self.label.setPixmap(QPixmap(file_name)) def get_files(self): files_dialog = QFileDialog() files_dialog.setFileMode(QFileDialog.AnyFile) files_dialog.setFilter(QDir.Files) if files_dialog.exec(): file_names = files_dialog.selectedFiles() f = open(file_names[0], 'r') with f: data = f.read() self.text_edit.setText(data) if __name__ == '__main__': app = QApplication(sys.argv) demo = FileDialog() demo.show() sys.exit(app.exec())