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