本文实例讲述了Python PyQt5标准对话框用法。分享给大家供大家参考,具体如下:

很全的Qt的标准对话框,包含QInputDialog、QColorDialog、QFontDialog、QMessageBox、QOpenFileDialog...
全部是由官网的C++版本,转换成PyQt5版本。
有些细节忽略了,因为实在不知怎么转换过来。捣鼓了一晚上,总算完成了,好累啊,不过很开心!
效果图:
完整代码:
# -*- coding: utf-8 -*-
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class DialogOptionsWidget(QWidget):
def __init__(self, parent=None):
super(DialogOptionsWidget,self).__init__(parent)
def addCheckBox(self, text, value):
pass
def addSpacer():
pass
def value():
pass
class StandardDialog(QDialog):
def __init__(self,parent=None):
super(StandardDialog,self).__init__(parent)
self.setWindowTitle("Standard Dialog")
frameStyle = QFrame.Sunken | QFrame.Panel
mainLayout = QVBoxLayout(self)
toolbox = QToolBox()
mainLayout.addWidget(toolbox)
self.errorMessageDialog = QErrorMessage(self)
pushButton_integer = QPushButton("QInputDialog.get&Int()")
pushButton_double = QPushButton("QInputDialog.get&Double()")
pushButton_item = QPushButton("QInputDialog.getIte&m()")
pushButton_text = QPushButton("QInputDialog.get&Text()")
pushButton_multiLineText = QPushButton("QInputDialog.get&MultiLineText()")
pushButton_color = QPushButton("QColorDialog.get&Color()")
pushButton_font = QPushButton("QFontDialog.get&Font()")
pushButton_directory = QPushButton("QFileDialog.getE&xistingDirectory()")
pushButton_openFileName = QPushButton("QFileDialog.get&OpenFileName()")
pushButton_openFileNames = QPushButton("QFileDialog.&getOpenFileNames()")
pushButton_saveFileName = QPushButton("QFileDialog.get&SaveFileName()")
pushButton_critical = QPushButton("QMessageBox.critica&l()")
pushButton_information = QPushButton("QMessageBox.i&nformation()")
pushButton_question = QPushButton("QQMessageBox.&question()")
pushButton_warning = QPushButton("QMessageBox.&warning()")
pushButton_error = QPushButton("QErrorMessage.showM&essage()")
self.label_integer = QLabel()
self.label_double = QLabel()
self.label_item = QLabel()
self.label_text = QLabel()
self.label_multiLineText = QLabel()
self.label_color = QLabel()
self.label_font = QLabel()
self.label_directory = QLabel()
self.label_openFileName = QLabel()
self.label_openFileNames = QLabel()
self.label_saveFileName = QLabel()
self.label_critical = QLabel()
self.label_information = QLabel()
self.label_question = QLabel()
self.label_warning = QLabel()
self.label_error = QLabel()
self.label_integer.setFrameStyle(frameStyle)
self.label_double.setFrameStyle(frameStyle)
self.label_item.setFrameStyle(frameStyle)
self.label_text.setFrameStyle(frameStyle)
self.label_multiLineText.setFrameStyle(frameStyle)
self.label_color.setFrameStyle(frameStyle)
self.label_font.setFrameStyle(frameStyle)
self.label_directory.setFrameStyle(frameStyle)
self.label_openFileName.setFrameStyle(frameStyle)
self.label_openFileNames.setFrameStyle(frameStyle)
self.label_saveFileName.setFrameStyle(frameStyle)
self.label_critical.setFrameStyle(frameStyle)
self.label_information.setFrameStyle(frameStyle)
self.label_question.setFrameStyle(frameStyle)
self.label_warning.setFrameStyle(frameStyle)
self.label_error.setFrameStyle(frameStyle)
page = QWidget()
layout = QGridLayout(page)
layout.setColumnStretch(1,1)
layout.setColumnMinimumWidth(1,250)
layout.addWidget(pushButton_integer,0,0)
layout.addWidget(self.label_integer,0,1)
layout.addWidget(pushButton_double,1,0)
layout.addWidget(self.label_double,1,1)
layout.addWidget(pushButton_item,2,0)
layout.addWidget(self.label_item,2,1)
layout.addWidget(pushButton_text,3,0)
layout.addWidget(self.label_text,3,1)
layout.addWidget(pushButton_multiLineText,4,0)
layout.addWidget(self.label_multiLineText,4,1)
layout.addItem(QSpacerItem(0,0,QSizePolicy.Ignored,QSizePolicy.MinimumExpanding),5,0)
toolbox.addItem(page, "Input Dialog")
page = QWidget()
layout = QGridLayout(page)
layout.setColumnStretch(1,1)
#layout.setColumnMinimumWidth(1,250)
layout.addWidget(pushButton_color,0,0)
layout.addWidget(self.label_color,0,1)
colorDialogOptionsWidget = DialogOptionsWidget()
colorDialogOptionsWidget.addCheckBox("Do not use native dialog", QColorDialog.DontUseNativeDialog)
colorDialogOptionsWidget.addCheckBox("Show alpha channel" , QColorDialog.ShowAlphaChannel)
colorDialogOptionsWidget.addCheckBox("No buttons" , QColorDialog.NoButtons)
layout.addItem(QSpacerItem(0,0,QSizePolicy.Ignored,QSizePolicy.MinimumExpanding),1,0)
layout.addWidget(colorDialogOptionsWidget, 2, 0, 1 ,2)
toolbox.addItem(page, "Color Dialog")
page = QWidget()
layout = QGridLayout(page)
layout.setColumnStretch(1, 1)
layout.addWidget(pushButton_font, 0, 0)
layout.addWidget(self.label_font, 0, 1)
fontDialogOptionsWidget = DialogOptionsWidget()
fontDialogOptionsWidget.addCheckBox("Do not use native dialog", QFontDialog.DontUseNativeDialog)
fontDialogOptionsWidget.addCheckBox("No buttons", QFontDialog.NoButtons)
layout.addItem(QSpacerItem(0, 0, QSizePolicy.Ignored, QSizePolicy.MinimumExpanding), 1, 0)
layout.addWidget(fontDialogOptionsWidget, 2, 0, 1 ,2)
toolbox.addItem(page, "Font Dialog")
page = QWidget()
layout = QGridLayout(page)
layout.setColumnStretch(1, 1)
layout.addWidget(pushButton_directory, 0, 0)
layout.addWidget(self.label_directory, 0, 1)
layout.addWidget(pushButton_openFileName, 1, 0)
layout.addWidget(self.label_openFileName, 1, 1)
layout.addWidget(pushButton_openFileNames, 2, 0)
layout.addWidget(self.label_openFileNames, 2, 1)
layout.addWidget(pushButton_saveFileName, 3, 0)
layout.addWidget(self.label_saveFileName, 3, 1)
fileDialogOptionsWidget = DialogOptionsWidget()
fileDialogOptionsWidget.addCheckBox("Do not use native dialog", QFileDialog.DontUseNativeDialog)
fileDialogOptionsWidget.addCheckBox("Show directories only", QFileDialog.ShowDirsOnly)
fileDialogOptionsWidget.addCheckBox("Do not resolve symlinks", QFileDialog.DontResolveSymlinks)
fileDialogOptionsWidget.addCheckBox("Do not confirm overwrite", QFileDialog.DontConfirmOverwrite)
fileDialogOptionsWidget.addCheckBox("Do not use sheet", QFileDialog.DontUseSheet)
fileDialogOptionsWidget.addCheckBox("Readonly", QFileDialog.ReadOnly)
fileDialogOptionsWidget.addCheckBox("Hide name filter details", QFileDialog.HideNameFilterDetails)
layout.addItem(QSpacerItem(0, 0, QSizePolicy.Ignored, QSizePolicy.MinimumExpanding), 4, 0)
layout.addWidget(fileDialogOptionsWidget, 5, 0, 1 ,2)
toolbox.addItem(page, "File Dialogs")
page = QWidget()
layout = QGridLayout(page)
layout.setColumnStretch(1, 1)
layout.addWidget(pushButton_critical, 0, 0)
layout.addWidget(self.label_critical, 0, 1)
layout.addWidget(pushButton_information, 1, 0)
layout.addWidget(self.label_information, 1, 1)
layout.addWidget(pushButton_question, 2, 0)
layout.addWidget(self.label_question, 2, 1)
layout.addWidget(pushButton_warning, 3, 0)
layout.addWidget(self.label_warning, 3, 1)
layout.addWidget(pushButton_error, 4, 0)
layout.addWidget(self.label_error, 4, 1)
layout.addItem(QSpacerItem(0, 0, QSizePolicy.Ignored, QSizePolicy.MinimumExpanding), 5, 0)
toolbox.addItem(page, "Message Boxes")
pushButton_integer.clicked.connect(self.setInteger)
pushButton_double.clicked.connect(self.setDouble)
pushButton_item.clicked.connect(self.setItem)
pushButton_text.clicked.connect(self.setText)
pushButton_multiLineText.clicked.connect(self.setMultiLineText)
pushButton_color.clicked.connect(self.setColor)
pushButton_font.clicked.connect(self.setFont)
pushButton_directory.clicked.connect(self.setExistingDirectory)
pushButton_openFileName.clicked.connect(self.setOpenFileName)
pushButton_openFileNames.clicked.connect(self.setOpenFileNames)
pushButton_saveFileName.clicked.connect(self.setSaveFileName)
pushButton_critical.clicked.connect(self.criticalMessage)
pushButton_information.clicked.connect(self.informationMessage)
pushButton_question.clicked.connect(self.questionMessage)
pushButton_warning.clicked.connect(self.warningMessage)
pushButton_error.clicked.connect(self.errorMessage)
#输入对话框 取整数
def setInteger(self):
intNum, ok = QInputDialog.getInt(self, "QInputDialog.getInteger()","Percentage:", 25, 0, 100, 1)
if ok:
self.label_integer.setText(str(intNum))
#输入对话框 取实数
def setDouble(self):
doubleNum, ok = QInputDialog.getDouble(self, "QInputDialog.getDouble()", "Amount:", 37.56, -10000, 10000, 2)
if ok:
self.label_double.setText(str(doubleNum))
#输入对话框 取列表项
def setItem(self):
items = ["Spring", "Summer", "Fall", "Winter"]
item, ok = QInputDialog.getItem(self, "QInputDialog.getItem()","Season:", items, 0, False)
if ok and item:
self.label_item.setText(item)
#输入对话框 取文本
def setText(self):
text, ok = QInputDialog.getText(self, "QInputDialog.getText()", "User name:", QLineEdit.Normal, QDir.home().dirName())
if ok and text:
self.label_text.setText(text)
#输入对话框 取多行文本
def setMultiLineText(self):
text, ok = QInputDialog.getMultiLineText(self, "QInputDialog.getMultiLineText()", "Address:", "John Doe\nFreedom Street")
if ok and text:
self.label_multiLineText.setText(text)
#颜色对话框 取颜色
def setColor(self):
#options = QColorDialog.ColorDialogOptions(QFlag.QFlag(colorDialogOptionsWidget.value()))
color = QColorDialog.getColor(Qt.green, self, "Select Color")
if color.isValid():
self.label_color.setText(color.name())
self.label_color.setPalette(QPalette(color))
self.label_color.setAutoFillBackground(True)
#字体对话框 取字体
def setFont(self):
#options = QFontDialog.FontDialogOptions(QFlag(fontDialogOptionsWidget.value()))
#font, ok = QFontDialog.getFont(ok, QFont(self.label_font.text()), self, "Select Font",options)
font, ok = QFontDialog.getFont()
if ok:
self.label_font.setText(font.key())
self.label_font.setFont(font)
#目录对话框 取目录
def setExistingDirectory(self):
#options = QFileDialog.Options(QFlag(fileDialogOptionsWidget->value()))
#options |= QFileDialog.DontResolveSymlinks | QFileDialog.ShowDirsOnly
directory = QFileDialog.getExistingDirectory(self,
"QFileDialog.getExistingDirectory()",
self.label_directory.text())
if directory:
self.label_directory.setText(directory)
#打开文件对话框 取文件名
def setOpenFileName(self):
#options = QFileDialog.Options(QFlag(fileDialogOptionsWidget.value()))
#selectedFilter
fileName, filetype = QFileDialog.getOpenFileName(self,
"QFileDialog.getOpenFileName()",
self.label_openFileName.text(),
"All Files (*);;Text Files (*.txt)")
if fileName:
self.label_openFileName.setText(fileName)
#打开文件对话框 取一组文件名
def setOpenFileNames(self):
#options = QFileDialog.Options(QFlag(fileDialogOptionsWidget.value()))
#selectedFilter
openFilesPath = "D:/documents/pyMarksix/draw/"
files, ok = QFileDialog.getOpenFileNames(self,
"QFileDialog.getOpenFileNames()",
openFilesPath,
"All Files (*);;Text Files (*.txt)")
if len(files):
self.label_openFileNames.setText(", ".join(files))
#保存文件对话框 取文件名
def setSaveFileName(self):
#options = QFileDialog.Options(QFlag(fileDialogOptionsWidget.value()))
#selectedFilter
fileName, ok = QFileDialog.getSaveFileName(self,
"QFileDialog.getSaveFileName()",
self.label_saveFileName.text(),
"All Files (*);;Text Files (*.txt)")
if fileName:
self.label_saveFileName.setText(fileName)
def criticalMessage(self):
#reply = QMessageBox.StandardButton()
MESSAGE = "批评!"
reply = QMessageBox.critical(self,
"QMessageBox.critical()",
MESSAGE,
QMessageBox.Abort | QMessageBox.Retry | QMessageBox.Ignore)
if reply == QMessageBox.Abort:
self.label_critical.setText("Abort")
elif reply == QMessageBox.Retry:
self.label_critical.setText("Retry")
else:
self.label_critical.setText("Ignore")
def informationMessage(self):
MESSAGE = "信息"
reply = QMessageBox.information(self, "QMessageBox.information()", MESSAGE)
if reply == QMessageBox.Ok:
self.label_information.setText("OK")
else:
self.label_information.setText("Escape")
def questionMessage(self):
MESSAGE = "疑问"
reply = QMessageBox.question(self, "QMessageBox.question()",
MESSAGE,
QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)
if reply == QMessageBox.Yes:
self.label_question.setText("Yes")
elif reply == QMessageBox.No:
self.label_question.setText("No")
else:
self.label_question.setText("Cancel")
def warningMessage(self):
MESSAGE = "警告文本"
msgBox = QMessageBox(QMessageBox.Warning,
"QMessageBox.warning()",
MESSAGE,
QMessageBox.Retry | QMessageBox.Discard | QMessageBox.Cancel,
self)
msgBox.setDetailedText("详细信息。。。")
#msgBox.addButton("Save &Again", QMessageBox.AcceptRole)
#msgBox.addButton("&Continue", QMessageBox.RejectRole)
if msgBox.exec() == QMessageBox.AcceptRole:
self.label_warning.setText("Retry")
else:
self.label_warning.setText("Abort")
def errorMessage(self):
self.errorMessageDialog.showMessage(
"This dialog shows and remembers error messages. "
"If the checkbox is checked (as it is by default), "
"the shown message will be shown again, "
"but if the user unchecks the box the message "
"will not appear again if QErrorMessage.showMessage() "
"is called with the same message.")
self.label_error.setText("If the box is unchecked, the message "
"won't appear again.")
app=QApplication(sys.argv)
form=StandardDialog()
form.show()
app.exec_()
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
# Python
# PyQt5
# 对话框
# python PyQt5中单行文本输入控件QLineEdit用法详解
# python PyQt5事件机制和定时器原理分析及用法详解
# python PyQt5中QButtonGroup的详细用法解析与应用实战记录
# 进阶
# 操作技巧
# 相关内容
# 是由
# 感兴趣
# 数据结构
# 给大家
# 很开心
# 转换成
# 更多关于
# 所述
# 好累
# 程序设计
# 官网
# 不知怎么
# 使用技巧
# 完成了
# 保存文件
# 晚上
相关文章:
家庭建站与云服务器建站,如何选择更优?
网站app免费制作软件,能免费看各大网站视频的手机app?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
建站之星如何配置系统实现高效建站?
如何用IIS7快速搭建并优化网站站点?
制作营销网站公司,淘特是干什么用的?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
常州企业建站如何选择最佳模板?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何在腾讯云免费申请建站?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
如何通过万网虚拟主机快速搭建网站?
,sp开头的版面叫什么?
如何快速使用云服务器搭建个人网站?
网站制作说明怎么写,简述网页设计的流程并说明原因?
如何选择高效稳定的ISP建站解决方案?
如何通过VPS建站实现广告与增值服务盈利?
如何在橙子建站中快速调整背景颜色?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
如何在VPS电脑上快速搭建网站?
如何打造高效商业网站?建站目的决定转化率
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Android自定义控件实现温度旋转按钮效果
如何快速查询域名建站关键信息?
如何在景安服务器上快速搭建个人网站?
宝塔面板如何快速创建新站点?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
建站之星与建站宝盒如何选择最佳方案?
韩国服务器如何优化跨境访问实现高效连接?
山东网站制作公司有哪些,山东大源集团官网?
如何在Windows虚拟主机上快速搭建网站?
制作网站的公司有哪些,做一个公司网站要多少钱?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
如何撰写建站申请书?关键要点有哪些?
建站主机无法访问?如何排查域名与服务器问题
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
如何在阿里云香港服务器快速搭建网站?
大型企业网站制作流程,做网站需要注册公司吗?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
如何自定义建站之星网站的导航菜单样式?
如何获取上海专业网站定制建站电话?
如何快速完成中国万网建站详细流程?
如何在IIS管理器中快速创建并配置网站?
简单实现Android验证码
深圳网站制作的公司有哪些,dido官方网站?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
香港服务器建站指南:免备案优势与SEO优化技巧全解析
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
*请认真填写需求信息,我们会在24小时内与您取得联系。