前言
PyQt5中弹出窗口最常用的三种:输入框、消息提示、文件夹对话框,下面详细介绍这三大类。
一、QInputDialog–弹出输入对话框
1. 输入整数
value, ok = QInputDialog.getInt(self, "输入框标题", "这是提示信息\n\n请输入整数:", 37, -10000, 10000, 2)
效果:
2. 输入小数
value, ok = QInputDialog.getDouble(self, "输入框标题", "这是提示信息\n\n请输入整数:", 37.56, -10000, 10000, 2)
效果:
3. 输入文本
value, ok = QInputDialog.getText(self, "输入框标题", "这是提示信息\n\n请输入文本:", QLineEdit.Normal, "这是默认值")
效果:
4. 输入多行文本
value, ok = QInputDialog.getMultiLineText(self, "输入框标题", "这是提示信息\n\n请输入地址:", "默认的\n我的地址是\n中国广东广州番禺")
效果:
5. 输入选项
items = ["Spring", "Summer", "Fall", "Winter"]
value, ok = QInputDialog.getItem(self, "输入框标题", "这是提示信息\n\n请选择季节:", items, 1, True)
效果:
注意
输入后有两个选项,点击OK则代码中value为输入内容,ok为True;点击Cancel则value为空,ok为False。
示例
import sys
from PyQt5.QtWidgets import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('PyQt5 弹出窗口')
self.resize(400, 300)
h1 = QHBoxLayout(self)
btn = QPushButton('弹出窗口')
btn.clicked.connect(self.do_btn)
h1.addWidget(btn)
def do_btn(self, event):
value, ok = QInputDialog.getInt(self, "输入框标题", "这是提示信息\n\n请输入整数:", 37, -10000, 10000, 2)
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
效果: 点击弹出窗口按钮则弹出输入框,更换为其它输入框,更改do_btn函数中的语句即可。
二、QMessageBox–弹出消息提示框
1. 信息
用来告诉用户关于提示信息
reply = QMessageBox.information(self, "消息框标题", "这是一条消息。", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
效果: 选择Yes代码中replay为16384,选择No则replay为65536,这里不知道为什么。。。下面几个也都是这样
2. 问答
用来告诉用户关于提问消息
reply = QMessageBox.question(self, "消息框标题", "这是一条问答吗?", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
效果:
3. 警告
用来告诉用户关于不寻常的错误消息
reply = QMessageBox.warning(self, "消息框标题", "这是一条警告!", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
效果:
4. 危险
用来告诉用户关于严重的错误消息
reply = QMessageBox.critical(self, '标题', '严重错误对话框消息正文', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
效果:
5. 关于
reply = QMessageBox.about(self, "消息框标题", "这是关于软件的说明。。。")
效果: 注意:这里代码中没有选项,点击OK,replay返回None
示例
import sys
from PyQt5.QtWidgets import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('PyQt5 弹出窗口')
self.resize(400, 300)
h1 = QHBoxLayout(self)
btn = QPushButton('弹出窗口')
btn.clicked.connect(self.do_btn)
h1.addWidget(btn)
def do_btn(self, event):
reply = QMessageBox.information(self, "消息框标题", "这是一条消息。", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
效果: 点击弹出窗口按钮则弹出消息框,更换为其它消息框,更改do_btn函数中的语句即可。 上面几种就是消息框中图标有所不同,注意 QMessageBox.about (关于消息框) 后不需要选项。
按钮类型
(1) 标准按钮类型
共有七种标准按钮类型,可自行组合。
(2) 自定义按钮类型
import sys
from PyQt5.QtWidgets import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('PyQt5 弹出窗口')
self.resize(400, 300)
h1 = QHBoxLayout(self)
btn = QPushButton('弹出窗口')
btn.clicked.connect(self.do_btn)
h1.addWidget(btn)
def do_btn(self):
self.reply = QMessageBox(QMessageBox.Question, "消息框标题", "这是一条消息。")
self.reply.addButton('确定', QMessageBox.YesRole)
self.reply.addButton('取消', QMessageBox.NoRole)
self.reply.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
注意!!!这里reply需赋值为窗口的对象属性 (即self.reply),否则窗口会一闪而过!!! 效果:
三、QFileDialog–弹出文件对话框
1. 文件夹
dir_ = QFileDialog.getExistingDirectory(self, "选取文件夹", "C:/")
弹出C盘目录,dir_ 返回选择的文件夹路径。
2. 单文件
file_, filetype = QFileDialog.getOpenFileName(self, "选取文件", "C:/", "All Files (*);;Text Files (*.txt)")
file_ 返回选择的文件路径。
3. 多文件
files, ok = QFileDialog.getOpenFileNames(self, "多文件选择", "C:/", "All Files (*);;Text Files (*.txt)")
按钮 Ctrl 可多选文件,files返回选择文件的路径。
4. 保存
file_, ok = QFileDialog.getSaveFileName(self, "文件保存", "C:/", "All Files (*);;Text Files (*.txt)")
保存为txt类型,file_ 返回文件保存路径。
5. 另存为
file_, ok = QFileDialog.getSaveFileName(self, "文件另存为", "C:/", "All Files (*);;Text Files (*.txt)")
保存为txt类型,file_ 返回文件保存路径。 似乎跟 4. 保存 没什么区别。。。
示例
import sys
from PyQt5.QtWidgets import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('PyQt5 弹出窗口')
self.resize(400, 300)
h1 = QHBoxLayout(self)
btn = QPushButton('弹出窗口')
btn.clicked.connect(self.do_btn)
h1.addWidget(btn)
def do_btn(self, event):
dir_ = QFileDialog.getExistingDirectory(self, "选取文件夹", "C:/")
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
点击 弹出窗口 弹出 起始路径,即可选择文件夹。
|