前文
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类的常用方法
方法 | 描述 |
---|---|
setWindowTitle() |
设置对话框标题 |
setWindowModality() |
设置窗口模态,取值如下: - Qt.NonModal , 非模态,可以和程序其他窗口交互- Qt.WindowModal , 窗口模态,程序在未处理当前对话框时,将阻止和对话框的父窗口进行交互- Qt.ApplicationModel ,应用程序模态,阻止和任何其他窗口进行交互 |
实例1: Dialog的使用
import sys
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())
image.png
QMessageBox
QMessageBox是一种通用的弹出式对话框。允许用户通过单击不同的标准按钮对消息进行反馈,每个标准按钮都有一个预定义的文本,角色和十六进制数。
QMessageBox常用的方法
方法 | 描述 |
---|---|
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() |
设置弹出对话框的图片 |
QMessage标准按钮类型
类型 | 描述 |
---|---|
QMessage.Ok |
同意操作 |
QMessage.Cancel |
取消操作 |
QMessage.Yes |
同意操作 |
QMessage.No |
取消操作 |
QMessage.Abort |
终止操作 |
QMessage.Retry |
重试操作 |
QMessage.Ignore |
忽略操作 |
QMessageBox 实例
import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QMessageBox, QApplication
class MessageDemo(QWidget):
def __init__(self):
super(MessageDemo, self).__init__()
self.resize(300, 100)
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())
image.png
QInputDialog
QInputDialog控件是一个标准对话框,由一个文本框和两个按钮(OK 按钮和Cancel 按钮)组成。当用户单击OK按钮或按Enter键后,在父窗口可以手机通过QInputDialog控件输入的信息。QInputDialog控件是QDialog标准对话框的一部分。
QInputDialog 常用方法
方法 | 描述 |
---|---|
getInt() |
从控件获得标准整数输入 |
getDouble() |
从控件获得标准浮点数输入 |
getText() |
从控件获得标准字符输入 |
getItem() |
从控件获得列表里的选项输入 |
实例: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())
image.png
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())
image.png
QFileDialog
QFileDialog 是用于打开和保存文件的标准对话框。QFileDialog 类继承自QDialog类。
QFileDialog在打开文件的时可以使用文件过滤器,用于显示指定扩展名的文件。
QFileDialog 常用方法
方法 | 描述 |
---|---|
getOpenFileName() |
返回用户所选择的文件,并且打开该文件 |
getSaveFileName() |
使用用户选择的文件名并保存文件 |
setFileMode |
可以选择的文件类型,通常有 - QFileDialog.AnyFile , 任何文件- QFileDialog.ExistingFile , 已存在的文件- QFileDialog.Directory , 文件目录- QFileDialog.ExistingFiles , 已经存在的多个文件 |
setFilter() |
设置过滤器,只显示过滤器允许的文件类型 |
实例:QFileDialog的使用
import sys
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())
image.png
如有侵权,请联系删除
网友评论