QDialog
子类:QMessageBox、QColorDialog、QFileDialog、QFontDialog、QInputDialog
常用方法
setWindowTitle() | 设置对话框标题 |
setWindowModality() | 设置窗口模态。取值如下: Qt.NonModal,非模态,可以和程序的其他窗口交互 |
代码示例
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class DialogDemo(QMainWindow):
def __init__(self, parent=None):
super(DialogDemo, self).__init__(parent)
self.setWindowTitle("Dialog 例子")
self.resize(350, 300)
self.btn = QPushButton(self)
self.btn.setText("弹出对话框")
self.btn.move(50, 50)
self.btn.clicked.connect(self.showdialog)
def showdialog(self):
dialog = QDialog()
btn = QPushButton("ok", dialog)
btn.move(50, 50)
dialog.setWindowTitle("Dialog")
dialog.setWindowModality(Qt.ApplicationModal)
dialog.exec_()
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = DialogDemo()
demo.show()
sys.exit(app.exec_())
QMessageBox
QMessageBox是一种通用的弹出式对话框,用于显示消息,允许用户通过单击不同的标准按钮对消息进行反馈。每个标准按钮都有一个预定义的文本、角色和十六进制数。
QMessageBox类提供了许多常用的弹出式对话框,如提示、警告、错误、询问、关于等对话框。这些不同类型的QMessageBox对话框只是显示时的图标不同,其他功能是一样的。
常用方法
information(QWidget parent,title, text, buttons,defaultButton) | 弹出消息对话框,各参数解释如下: parent,指定的父窗口控件 |
question(QWidget parent,title,text,buttons,defaultButton) | 弹出问答对话框(各参数解释同上) |
warning(QWidget parent,title,text,buttons,defaultButton) | 弹出警告对话框(各参数解释同上) |
ctitical(QWidget parent,title,text,buttons,defaultButton) | 弹出严重错误对话框(各参数解释同上) |
about(QWidget parent,title,text) | 弹出关于对话框(各参数解释同上) |
setTitle() | 设置标题 |
setText() | 设置消息正文 |
setlcon() | 设置弹出对话框的图片 |
标准按钮类型
QMessage.Ok | 同意操作 |
QMessage.Cancel | 取消操作 |
QMessage.Yes | 同意操作 |
QMessage.No | 取清操作 |
QMessage.Abort | 终止操作 |
QMessage.Retry | 重试操作 |
QMessage.Ignore | 忽略操作 |
5种常用的消息对话框及其显示效果
消息对话框,用来告诉用户关于提示消息 QMessageBox.information(self,"标题","消息对话框正文", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) | ![]() |
提问对话框,用来告诉用户关于提问消息 QMessageBox.question(self,"标题",”提问框消息正文", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) | ![]() |
警告对话框,用来告诉用户关于不寻常的错误消息 QMessageBox.warning(self,"标题”,“警告框消息正文", QMessageBox.Yes I QMessageBox.No, QMessageBox.Yes) | ![]() |
严重错误对话框,用来告诉用户关于严重的错误消息 QMessageBox.critical(self,"标题",“严重错误对话框消息正文", QMessageBox.Yes| QMessageBox.No,QMessageBox.Yes) | ![]() |
关于对话框 QMessageBox.about(self,"标题","关于对话框”) | ![]() |
代码示例
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class WinForm(QWidget):
def __init__(self):
super(WinForm, self).__init__()
self.setWindowTitle("QMessageBox 例子")
self.resize(300, 100)
layout = QVBoxLayout()
self.myButton01 = QPushButton(self)
self.myButton01.setText("点击弹出消息对话框")
self.myButton01.clicked.connect(self.msg_information)
self.myButton02 = QPushButton(self)
self.myButton02.setText("点击弹出提问对话框")
self.myButton02.clicked.connect(self.msg_question)
self.myButton03 = QPushButton(self)
self.myButton03.setText("点击弹出警告对话框")
self.myButton03.clicked.connect(self.msg_warning)
self.myButton04 = QPushButton(self)
self.myButton04.setText("点击弹出严重错误对话框")
self.myButton04.clicked.connect(self.msg_critical)
self.myButton05 = QPushButton(self)
self.myButton05.setText("点击弹出关于对话框")
self.myButton05.clicked.connect(self.msg_about)
layout.addWidget(self.myButton01)
layout.addWidget(self.myButton02)
layout.addWidget(self.myButton03)
layout.addWidget(self.myButton04)
layout.addWidget(self.myButton05)
self.setLayout(layout)
def msg_information(self):
# 使用infomation信息框
reply = QMessageBox.information(self, "标题", "消息对话框正文", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
print(reply)
def msg_question(self):
# 使用question信息框
reply = QMessageBox.question(self, "标题", "提问框消息正文", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
print(reply)
def msg_warning(self):
# 使用warning信息框
reply = QMessageBox.warning(self, "标题", "警告框消息正文", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
print(reply)
def msg_critical(self):
# 使用warning信息框
reply = QMessageBox.critical(self, "标题", "严重错误对话框消息正文", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
print(reply)
def msg_about(self):
# 使用about信息框
reply = QMessageBox.about(self, "标题", "关于对话框")
print(reply)
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = WinForm()
demo.show()
sys.exit(app.exec_())
QInputDialog
QInputDialog控件是一个标准对话框,由一个文本框和两个按钮(OK按钮和Cancel按钮)组成。
当用户单击OK按钮或按Enter键后,在父窗口可以收集通过QInputDialog控件输入的信息。在QInputDialog控件中可以输入数字、字符串或列表中的选项。标签用于提示必要的信息。
常用方法
getlnt() | 从控件中获得标准整数输入 |
getDouble() | 从控件中获得标准浮点数输入 |
getText() | 从控件中获得标准字符串输入 |
getltem() | 从控件中获得列表里的选项输入 |
代码示例
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class InputdialogDemo(QWidget):
def __init__(self, parent=None):
super(InputdialogDemo, self).__init__(parent)
layout = QFormLayout()
self.btn1 = QPushButton("获得列表里的选项")
self.btn1.clicked.connect(self.getItem)
self.le1 = QLineEdit()
layout.addRow(self.btn1, self.le1)
self.btn2 = QPushButton("获得字符串")
self.btn2.clicked.connect(self.getIext)
self.le2 = QLineEdit()
layout.addRow(self.btn2, self.le2)
self.btn3 = QPushButton("获得整数")
self.btn3.clicked.connect(self.getInt)
self.le3 = QLineEdit()
layout.addRow(self.btn3, self.le3)
self.setLayout(layout)
self.setWindowTitle("Input Dialog 例子")
def getItem(self):
items = ("C", "C++", "Java", "Python")
item, ok = QInputDialog.getItem(self, "select input dialog",
"语言列表", items, 0, False)
if ok and item:
self.le1.setText(item)
def getIext(self):
text, ok = QInputDialog.getText(self, 'Text Input Dialog', '输入姓名:')
if ok:
self.le2.setText(str(text))
def getInt(self):
num, ok = QInputDialog.getInt(self, "integer input dualog", "输入数字")
if ok:
self.le3.setText(str(num))
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = InputdialogDemo()
demo.show()
sys.exit(app.exec_())
QFontDialog
QFontDialog控件是一个常用的字体选择对话框,可以让用户选择所显示文本的字号大小、样式和格式。使用QFontDialog类的静态方法getFont(),可以从字体选择对话框中选择文本的显示字号大小、样式和格式。
代码示例
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class FontDialogDemo(QWidget):
def __init__(self, parent=None):
super(FontDialogDemo, self).__init__(parent)
layout = QVBoxLayout()
self.fontButton = QPushButton("choose font")
self.fontButton.clicked.connect(self.getFont)
layout.addWidget(self.fontButton)
self.fontLineEdit = QLabel("Hello,测试字体例子")
layout.addWidget(self.fontLineEdit)
self.setLayout(layout)
self.setWindowTitle("Font Dialog 例子")
def getFont(self):
font, ok = QFontDialog.getFont()
if ok:
self.fontLineEdit.setFont(font)
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = FontDialogDemo()
demo.show()
sys.exit(app.exec_())
QFileDialog
是用于打开和保存文件的标准对话框。
常用方法
getOpenFileName() | 返回用户所选择文件的名称,并打开该文件 |
getSaveFileName() | 使用用户选择的文件名并保存文件 |
setFileMode() | 可以选择的文件类型,枚举常量是: QFileDialog.Anyfile,任何文件 QFileDialog.ExistingFile,已存在的文件 QFileDialog.Directory,文件目录 QFileDialog.ExistingFiles,已经存在的多个文件 |
setFilter() | 设置过滤器,只显示过滤器允许的文件类型 |
代码示例
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class filedialogdemo(QWidget):
def __init__(self, parent=None):
super(filedialogdemo, self).__init__(parent)
layout = QVBoxLayout()
self.btn = QPushButton("加载图片")
self.btn.clicked.connect(self.getfile)
layout.addWidget(self.btn)
self.le = QLabel("")
layout.addWidget(self.le)
self.btn1 = QPushButton("加载文本文件")
self.btn1.clicked.connect(self.getfiles)
layout.addWidget(self.btn1)
self.contents = QTextEdit()
layout.addWidget(self.contents)
self.setLayout(layout)
self.setWindowTitle("File Dialog 例子")
def getfile(self):
fname, _ = QFileDialog.getOpenFileName(self, 'Open file', 'c:\\', "Image files (*.jpg *.gif)")
self.le.setPixmap(QPixmap(fname))
def getfiles(self):
dlg = QFileDialog()
dlg.setFileMode(QFileDialog.AnyFile)
dlg.setFilter(QDir.Files)
if dlg.exec_():
filenames = dlg.selectedFiles()
f = open(filenames[0], 'r')
with f:
data = f.read()
self.contents.setText(data)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = filedialogdemo()
ex.show()
sys.exit(app.exec_())