当前位置:网站首页>PyQt5快速开发与实战 4.9 对话框类控件
PyQt5快速开发与实战 4.9 对话框类控件
2022-07-27 19:54:00 【Ding Jiaxiong】
PyQt5快速开发与实战
文章目录
4. 第4章 PyQt5 基本窗口控件
4.9 对话框类控件
4.9.1 QDialog
在PyQt 5中定义了一系列的标准对话框类,让使用者能够方便和快捷地通过各个类完成字号大小、字体颜色以及文件的选择等。
QDialog类的子类主要有QMessageBox.QFileDialog,QFontDialog ,QInputDialog等。
QDialog类中的常用方法
| 方法 | 描述 |
|---|---|
| setWindowTitle() | 设置对话框标题 |
| setWindowModality() | 设置窗口模态。取值如下: - Qt.NonModal,非模态,可以和程序的其他窗口交互;Qt.WindowModal,窗口模态,程序在未处理完当前对话框时,将阻止和对话框的父窗口进行交互;Qt.ApplicationModal,应用程序模态,阻止和任何其他窗口进行交互 |
QDialog的使用
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__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = DialogDemo()
win.show()
sys.exit(app.exec_())

4.9.2 QMessageBox
QMessageBox是一种通用的弹出式对话框,用于显示消息,允许用户通过单击不同的标准按钮对消息进行反馈。每个标准按钮都有一个预定义的文本、角色和十六进制数。
QMessageBox类提供了许多常用的弹出式对话框,如提示、警告、错误、询问、关于等对话框。这些不同类型的QMessageBox对话框只是显示时的图标不同,其他功能是一样的。
QMessageBox类中的常用方法
| 方法 | 描述 |
|---|---|
| information(QWidget,parent,title,text,buttons,defaultButton) | 弹出消息对话框,各参数解释如下: parent,指定的父窗口控件;title,对话框标题text,对话框文本;buttons:多个标准按钮,默认为OK按钮;defaultButton:默认选中的标准按纽,默认是第一个标准按钮 |
| question(Qwidget parent,title, text, buttons, defaultButton) | 弹出问答对话框(各参数解释同上) |
| waming(QWidget parent,title, text, buttons, defaultButton) | 弹出警告对话框(各参数解释同上) |
| ctitical(QWidget parent,title, text, buttons , defaultButton) | 弹出严重错误对话框(各参数解释同上) |
| about(QWidget parent,titIe, text) | 弹出关于对话框(各参数解释同上) |
| setTitle() | 设置标题 |
| setText() | 设置消息正文 |
| setIcon() | 设置弹出对话框的图片 |
QMessageBox的标准按钮类型
| 类型 | 描述 |
|---|---|
| QMessage.Ok | 同意操作 |
| QMessage.Cancel | 取消操作 |
| QMessage.Yes | 同意操作 |
| QMessage.No | 取消操作 |
| QMessage.About | 终止操作 |
| QMessage.Retry | 重试操作 |
| QMessage.Ignore | 忽略操作 |
5种常用的消息对话框及其显示效果

QMessageBox使用案例
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class MyWindow(QWidget):
def __init__(self):
super(MyWindow, self).__init__()
self.setWindowTitle("QMessageBox案例")
self.resize(300 ,100)
self.myButton = QPushButton(self)
self.myButton.setText("点击弹出消息框")
self.myButton.clicked.connect(self.msg)
def msg(self):
# information
reply = QMessageBox.information(self,"标题","消息正文",QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes)
print(reply)
if __name__ == '__main__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())

4.9.3 QInputDialog
QInputDialog 控件是一个标准对话框,由一个文本框和两个按钮(OK 按钮和Cancel 按钮)组成。当用户单击OK按钮或按 Enter 键后,在父窗口可以收集通过QInputDialog控件输入的信息。QInputDialog 控件是QDialog标准对话框的一部分。
在 QInputDialog控件中可以输入数字、字符串或列表中的选项。标签用于提示必要的信息。
QInputDialog类中的常用方法
| 方法 | 描述 |
|---|---|
| getInt() | 从控件中获得标准整数输入 |
| getDouble() | 从控件中获得标准浮点数输入 |
| getText() | 从控件中获得标准字符串输入 |
| getItem() | 从控件中获得列表中的选项输入 |
QInputDialog的使用案例
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.getText)
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 getText(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 dialog","输入数字")
if ok :
self.le3.setText(str(num))
if __name__ == '__main__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = InputdialogDemo()
win.show()
sys.exit(app.exec_())

4.9.4 QFontDialog
QFontDialog 控件是一个常用的字体选择对话框,可以让用户选择所显示文本的字号大小、样式和格式。QFontDialog是 QDialog标准对话框的一部分。使用QFontDialog类的静态方法getFont(),可以从字体选择对话框中选择文本的显示字号大小、样式和格式。
QFontDialog的使用
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__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = FontDialogDemo()
win.show()
sys.exit(app.exec_())

4.9.5 QFileDialog
QFileDialog是用于打开和保存文件的标准对话框。QFileDialog类继承自QDialog类。
QFileDialog在打开文件时使用了文件过滤器,用于显示指定扩展名的文件。也可以设置使用OFileDialog打开文件时的起始目录和指定扩展名的文件。
QFileDialog类中的常用方法
| 方法 | 描述 |
|---|---|
| getOpenFileName() | 返回用户所选择的文件的名称,并打开该文件 |
| getSaveFileName() | 使用用户选择的文件名并保存文件 |
| setFileMode() | 可以选择的文件类型,枚举常量是: QFileDialog.AnyFile,任何文件 QFileDialog.ExistingFile,已存在的文件. QFileDialog.Directory,文件目录 QFileDialog.ExistingFiles,已经存在的多个文件 |
| setFilter() | 设置过滤器, 只显示过滤器允许的文件类型 |
QFileDialog的使用
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', 'd:\\', "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',encoding='UTF-8')
with f:
data = f.read()
self.contents.setText(data)
if __name__ == '__main__':
# from pyqt5_plugins.examples.exampleqmlitem import QtCore
# QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = filedialogdemo()
win.show()
sys.exit(app.exec_())





边栏推荐
- [stonedb fault diagnosis] system resource bottleneck diagnosis
- leetcode15--三数之和
- [stonedb fault diagnosis] MDL lock waiting
- Direct insertion sort of seven sorts
- 投资22亿美金!格科微12英寸CIS制造项目落户上海临港
- In depth understanding of redis master-slave principle
- Leetcode-55-jump game
- Hill sort of seven sorts
- Vocational school Panyun network security competition ----- exploration of hidden information
- Bluetooth framework summary
猜你喜欢

Solid state relay

Buuctf brushes eleven questions (05)

带你掌握 Makefile 分析

Excel only wants to visualize charts and make data move? Yes, come and watch (with a large number of templates to download)

Redis learning

Deepfake's face is hard to distinguish between true and false, and musk Fenke has disguised successfully

软件测试的就业前景到底怎么样?

Analysis on data collection and analysis of network security competition in national vocational college skill competition

阿里资深软件测试工程师推荐测试人员必学——安全测试入门介绍

饿了么input输入框设置type=‘number‘时,去掉后面的上下按钮
随机推荐
七大排序之直接插入排序
What is the employment prospect of software testing?
【OBS】P B 丢帧阈值 buffer_duration_usec
Kubernetes二进制部署——理论部分
SQL injection less29 (parameter pollution bypasses WAF)
带你掌握 Makefile 分析
Leetcode-226-flip binary tree
【图解】三次握手,四次挥手 —— 用心看这一篇就够了
Relationship between DBM and VPP and Vpeak
Nine days later, we are together to focus on the new development of audio and video and mystery technology
Project management tool Zen
Alibaba Senior Software Testing Engineer recommends testers to learn -- Introduction to security testing
What is private traffic?
MMU learning summary
联发科携手三星推出全球首款支持Wi-Fi 6的8K电视
CMOS switch (II)_ Parameter extraction
cache学习
Leetcode-155-minimum stack
光藕继电器
EC code introduction