概述
本文实例讲述了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) layout.addWidget(self.label_integer,1) layout.addWidget(pushButton_double,1,0) layout.addWidget(self.label_double,1) layout.addWidget(pushButton_item,2,0) layout.addWidget(self.label_item,1) layout.addWidget(pushButton_text,3,0) layout.addWidget(self.label_text,1) layout.addWidget(pushButton_multiLineText,4,0) layout.addWidget(self.label_multiLineText,1) layout.addItem(QSpacerItem(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) layout.addWidget(self.label_color,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) layout.addWidget(colorDialogoptionsWidget,2) toolBox.addItem(page,"Color Dialog") page = QWidget() layout = QGridLayout(page) layout.setColumnStretch(1,1) layout.addWidget(pushButton_font,0) layout.addWidget(self.label_font,1) fontDialogoptionsWidget = DialogoptionsWidget() fontDialogoptionsWidget.addCheckBox("Do not use native dialog",QFontDialog.DontUseNativeDialog) fontDialogoptionsWidget.addCheckBox("No buttons",QFontDialog.NoButtons) layout.addItem(QSpacerItem(0,0) layout.addWidget(fontDialogoptionsWidget,"Font Dialog") page = QWidget() layout = QGridLayout(page) layout.setColumnStretch(1,1) layout.addWidget(pushButton_directory,0) layout.addWidget(self.label_directory,1) layout.addWidget(pushButton_openFileName,0) layout.addWidget(self.label_openFileName,1) layout.addWidget(pushButton_openFileNames,0) layout.addWidget(self.label_openFileNames,1) layout.addWidget(pushButton_saveFileName,0) layout.addWidget(self.label_saveFileName,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) layout.addWidget(fileDialogoptionsWidget,"File Dialogs") page = QWidget() layout = QGridLayout(page) layout.setColumnStretch(1,1) layout.addWidget(pushButton_critical,0) layout.addWidget(self.label_critical,1) layout.addWidget(pushButton_information,0) layout.addWidget(self.label_information,1) layout.addWidget(pushButton_question,0) layout.addWidget(self.label_question,1) layout.addWidget(pushButton_warning,0) layout.addWidget(self.label_warning,1) layout.addWidget(pushButton_error,0) layout.addWidget(self.label_error,"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,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,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()),"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()",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()",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标准对话框用法示例所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧