PyQt介绍——弹框介绍和使用
一、QMessageBox
QMessageBox是一种通用的弹出式对话框,用于显示消息,允许用户通过单击不同的标准按钮对消息进行反馈
QMessageBox类提供了许多常用的弹出式对话框,如提示、警告、错误、询问、关于等对话框。这些不同类型的QMessageBox对话框只是显示时的图标不同,其他功能是一样的。
QMessageBox有四种类型:information、question、warning和critical。
-
information类型
information类型的QMessageBox显示一个信息框,它通常用来提醒用户一些详细但不关键的信息。我们可以在标题和内容之间添加一个图标或在右上角添加一个帮助按钮。代码如下: -
question类型
question类型的QMessageBox通常用来显示一些需要用户回答“是”或“否”的问题。它可以有默认按钮和一些可选按钮,例如‘Yes’、‘No’、‘Cancel’和‘Help’等。如果你嵌入到应用程序的窗口中,它还可以显示一个缩小、关闭和拓展按钮,代码如下: -
warning类型
warning类型的QMessageBox通常用来警告用户可能会影响程序使用的一些操作或过程。例如,它在一些需要警告的代码中经常被使用。代码如下: -
critical类型
critical类型的QMessageBox在某些错误情况下被使用,例如程序崩溃、网络断开等。它是一种需要注意并进行处理的警告类型。代码如下:
from PyQt5.QtWidgets import *
import sysclass TestWidget(QWidget):def __init__(self):super(TestWidget, self).__init__()self.resize(400, 200)self.setWindowTitle("弹窗测试")self.main_layout = QVBoxLayout()self.main_layout.setContentsMargins(10, 10, 10, 10)self.setLayout(self.main_layout)self.button1 = QPushButton('消息对话框', self)self.button2 = QPushButton('提问对话框', self)self.button3 = QPushButton('警告对话框', self)self.button4 = QPushButton('严重错误对话框', self)self.button5 = QPushButton('关于对话框', self)self.main_layout.addWidget(self.button1)self.main_layout.addWidget(self.button2)self.main_layout.addWidget(self.button3)self.main_layout.addWidget(self.button4)self.main_layout.addWidget(self.button5)self.button1.clicked.connect(self.show_info_dialog)self.button2.clicked.connect(self.show_question_dialog)self.button3.clicked.connect(self.show_warning_dialog)self.button4.clicked.connect(self.show_critical_dialog)self.button5.clicked.connect(self.show_about_dialog)def show_info_dialog(self):QMessageBox.information(self, '提示信息', 'hello,提示你一下') # 可以不带选择按键,也可以带ok按键# QMessageBox.information(self, '提示信息', 'hello,提示你一下', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)def show_question_dialog(self):reply = QMessageBox.question(self, '有个问题', '你确定要这么干吗?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)if reply == QMessageBox.Yes:print("ok")else:print("no no no!")def show_warning_dialog(self):QMessageBox.warning(self, '此处有告警', '有告警发生', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)def show_critical_dialog(self):# 弹出信息对话框QMessageBox.critical(self, '慎重', '发生严重错误', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)def show_about_dialog(self):# 弹出信息对话框QMessageBox.about(self, '不知道', '关于对话')app = QApplication(sys.argv)
window = TestWidget()
window.show()
sys.exit(app.exec_())
二、QInputDialog
QInputDialog控件是一个标准对话框,由一个文本框和两个按钮(OK 按钮和Cancel 按钮)组成。
- 输入文本
value, ok = QInputDialog.getText(self, "输入框标题", "这是提示信息\n\n请输入文本:", QLineEdit.Normal, "这是默认值") # 第三个参数表示显示类型,可选,有正常(QLineEdit.Normal)、密碼( QLineEdit. Password)、不显示( QLineEdit. NoEcho)三种情况
- 输入多行文本
value, ok = QInputDialog.getMultiLineText(self, "输入框标题", "输入您的地址:", "默认的\n地址是\n中国北京东城区")
- 输入整数
value, ok = QInputDialog.getInt(self, "整数弹窗", "输入整数\n\n请输入整数:", 22, -10000, 10000, 2) # 后面四个数字的作用依次是 初始值 最小值 最大值 步幅
- 输入小数
value, ok = QInputDialog.getDouble(self, "数字弹窗", "请选择一个整数\n\n请输入整数:", 37.56, -10000, 10000, 2) # 后面四个数字的作用依次是 初始值 最小值 最大值 小数点后位数
- 输入选项
items = ["Spring", "Summer", "Fall", "Winter"]
value, ok = QInputDialog.getItem(self, "季节选择弹窗", "请选择一个季节\n\n请选择季节:", items, 1, True) # 1为默认选中选项目,True/False 列表框是否可编辑。
例子:
import sys
from PyQt5.QtWidgets import *class InputdialogWidget(QWidget):def __init__(self, parent=None):super(InputdialogWidget, 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 = ["Spring", "Summer", "Fall", "Winter"]item, ok = QInputDialog.getItem(self, "选择一个季节","季节列表\n\n请选择季节:", items, 1, False)if ok and item:self.le1.setText(item)def getIext(self):text, ok = QInputDialog.getText(self, '输入姓名的弹窗', '输入姓名:')if ok:self.le2.setText(str(text))def getInt(self):num, ok = QInputDialog.getInt(self, "输入数字弹窗", "输入数字", 22, -10000, 10000, 2)if ok:self.le3.setText(str(num))if __name__ == '__main__':app = QApplication(sys.argv)demo = InputdialogWidget()demo.show()sys.exit(app.exec_())
三、QFileDialog
-
文件夹
dir_ = QFileDialog.getExistingDirectory(self, “选取文件夹”, “C:/”) # 起始路径 -
单文件
设置文件扩展名过滤,注意用双分号间隔
file_, filetype = QFileDialog.getOpenFileName(self, “选取文件”, “C:/”, “All Files ();;Text Files (.txt)”) -
多文件
files, ok = QFileDialog.getOpenFileNames(self, “多文件选择”, “C:/”, “All Files ();;Text Files (.txt)”) -
保存
file_, ok = QFileDialog.getSaveFileName(self, “文件保存”, “C:/”, “All Files ();;Text Files (.txt)”) -
另存为
file_, ok = QFileDialog.getSaveFileName(self, “文件另存为”, “C:/”, “All Files ();;Text Files (.txt)”)