首页 > 代码库 > PyQt5标准对话框

PyQt5标准对话框

很全的Qt的标准对话框,包含QInputDialog、QColorDialog、QFontDialog、QMessageBox、QOpenFileDialog...

全部是由官网的C++版本,转换成PyQt5版本。

有些细节忽略了,因为实在不知怎么转换过来。捣鼓了一晚上,总算完成了,好累啊,不过很开心!

效果图:

技术分享技术分享

 

完整代码:

  1 # -*- coding: utf-8 -*-     2 from PyQt5.QtGui import *    3 from PyQt5.QtCore import *    4 from PyQt5.QtWidgets import *  5   6 import sys    7   8   9 class DialogOptionsWidget(QWidget): 10     def __init__(self, parent=None): 11         super(DialogOptionsWidget,self).__init__(parent) 12  13     def addCheckBox(self, text, value): 14         pass 15          16     def addSpacer(): 17         pass 18          19     def value(): 20         pass 21  22  23 class StandardDialog(QDialog):   24     def __init__(self,parent=None):   25         super(StandardDialog,self).__init__(parent)   26            27         self.setWindowTitle("Standard Dialog")   28          29         frameStyle = QFrame.Sunken | QFrame.Panel 30          31         mainLayout = QVBoxLayout(self) 32         toolbox = QToolBox() 33         mainLayout.addWidget(toolbox) 34          35         self.errorMessageDialog = QErrorMessage(self) 36          37         pushButton_integer = QPushButton("QInputDialog.get&Int()") 38         pushButton_double = QPushButton("QInputDialog.get&Double()") 39         pushButton_item = QPushButton("QInputDialog.getIte&m()") 40         pushButton_text = QPushButton("QInputDialog.get&Text()") 41         pushButton_multiLineText = QPushButton("QInputDialog.get&MultiLineText()") 42         pushButton_color = QPushButton("QColorDialog.get&Color()") 43         pushButton_font = QPushButton("QFontDialog.get&Font()") 44         pushButton_directory = QPushButton("QFileDialog.getE&xistingDirectory()") 45         pushButton_openFileName = QPushButton("QFileDialog.get&OpenFileName()") 46         pushButton_openFileNames = QPushButton("QFileDialog.&getOpenFileNames()") 47         pushButton_saveFileName = QPushButton("QFileDialog.get&SaveFileName()") 48         pushButton_critical = QPushButton("QMessageBox.critica&l()") 49         pushButton_information = QPushButton("QMessageBox.i&nformation()") 50         pushButton_question = QPushButton("QQMessageBox.&question()") 51         pushButton_warning = QPushButton("QMessageBox.&warning()") 52         pushButton_error = QPushButton("QErrorMessage.showM&essage()") 53          54         self.label_integer = QLabel() 55         self.label_double = QLabel() 56         self.label_item = QLabel() 57         self.label_text = QLabel() 58         self.label_multiLineText = QLabel() 59         self.label_color = QLabel() 60         self.label_font = QLabel() 61         self.label_directory = QLabel() 62         self.label_openFileName = QLabel() 63         self.label_openFileNames = QLabel() 64         self.label_saveFileName = QLabel() 65         self.label_critical = QLabel() 66         self.label_information = QLabel() 67         self.label_question = QLabel() 68         self.label_warning = QLabel() 69         self.label_error = QLabel() 70          71         self.label_integer.setFrameStyle(frameStyle) 72         self.label_double.setFrameStyle(frameStyle) 73         self.label_item.setFrameStyle(frameStyle) 74         self.label_text.setFrameStyle(frameStyle) 75         self.label_multiLineText.setFrameStyle(frameStyle) 76         self.label_color.setFrameStyle(frameStyle) 77         self.label_font.setFrameStyle(frameStyle) 78         self.label_directory.setFrameStyle(frameStyle) 79         self.label_openFileName.setFrameStyle(frameStyle) 80         self.label_openFileNames.setFrameStyle(frameStyle) 81         self.label_saveFileName.setFrameStyle(frameStyle) 82         self.label_critical.setFrameStyle(frameStyle) 83         self.label_information.setFrameStyle(frameStyle) 84         self.label_question.setFrameStyle(frameStyle) 85         self.label_warning.setFrameStyle(frameStyle) 86         self.label_error.setFrameStyle(frameStyle) 87    88          89         page = QWidget() 90         layout = QGridLayout(page) 91         layout.setColumnStretch(1,1) 92         layout.setColumnMinimumWidth(1,250) 93         layout.addWidget(pushButton_integer,0,0) 94         layout.addWidget(self.label_integer,0,1) 95         layout.addWidget(pushButton_double,1,0) 96         layout.addWidget(self.label_double,1,1) 97         layout.addWidget(pushButton_item,2,0) 98         layout.addWidget(self.label_item,2,1) 99         layout.addWidget(pushButton_text,3,0)100         layout.addWidget(self.label_text,3,1)101         layout.addWidget(pushButton_multiLineText,4,0)102         layout.addWidget(self.label_multiLineText,4,1)103         layout.addItem(QSpacerItem(0,0,QSizePolicy.Ignored,QSizePolicy.MinimumExpanding),5,0)104         toolbox.addItem(page, "Input Dialog")105         106         page = QWidget()107         layout = QGridLayout(page)108         layout.setColumnStretch(1,1)109         #layout.setColumnMinimumWidth(1,250)110         layout.addWidget(pushButton_color,0,0)111         layout.addWidget(self.label_color,0,1)112         colorDialogOptionsWidget = DialogOptionsWidget()113         colorDialogOptionsWidget.addCheckBox("Do not use native dialog", QColorDialog.DontUseNativeDialog)114         colorDialogOptionsWidget.addCheckBox("Show alpha channel" , QColorDialog.ShowAlphaChannel)115         colorDialogOptionsWidget.addCheckBox("No buttons" , QColorDialog.NoButtons)116         layout.addItem(QSpacerItem(0,0,QSizePolicy.Ignored,QSizePolicy.MinimumExpanding),1,0)117         layout.addWidget(colorDialogOptionsWidget, 2, 0, 1 ,2)118         toolbox.addItem(page, "Color Dialog")119         120         page = QWidget()121         layout = QGridLayout(page)122         layout.setColumnStretch(1, 1)123         layout.addWidget(pushButton_font, 0, 0)124         layout.addWidget(self.label_font, 0, 1)125         fontDialogOptionsWidget = DialogOptionsWidget()126         fontDialogOptionsWidget.addCheckBox("Do not use native dialog", QFontDialog.DontUseNativeDialog)127         fontDialogOptionsWidget.addCheckBox("No buttons", QFontDialog.NoButtons)128         layout.addItem(QSpacerItem(0, 0, QSizePolicy.Ignored, QSizePolicy.MinimumExpanding), 1, 0)129         layout.addWidget(fontDialogOptionsWidget, 2, 0, 1 ,2)130         toolbox.addItem(page, "Font Dialog")131 132         page = QWidget()133         layout = QGridLayout(page)134         layout.setColumnStretch(1, 1)135         layout.addWidget(pushButton_directory, 0, 0)136         layout.addWidget(self.label_directory, 0, 1)137         layout.addWidget(pushButton_openFileName, 1, 0)138         layout.addWidget(self.label_openFileName, 1, 1)139         layout.addWidget(pushButton_openFileNames, 2, 0)140         layout.addWidget(self.label_openFileNames, 2, 1)141         layout.addWidget(pushButton_saveFileName, 3, 0)142         layout.addWidget(self.label_saveFileName, 3, 1)143         fileDialogOptionsWidget = DialogOptionsWidget()144         fileDialogOptionsWidget.addCheckBox("Do not use native dialog", QFileDialog.DontUseNativeDialog)145         fileDialogOptionsWidget.addCheckBox("Show directories only", QFileDialog.ShowDirsOnly)146         fileDialogOptionsWidget.addCheckBox("Do not resolve symlinks", QFileDialog.DontResolveSymlinks)147         fileDialogOptionsWidget.addCheckBox("Do not confirm overwrite", QFileDialog.DontConfirmOverwrite)148         fileDialogOptionsWidget.addCheckBox("Do not use sheet", QFileDialog.DontUseSheet)149         fileDialogOptionsWidget.addCheckBox("Readonly", QFileDialog.ReadOnly)150         fileDialogOptionsWidget.addCheckBox("Hide name filter details", QFileDialog.HideNameFilterDetails)151         layout.addItem(QSpacerItem(0, 0, QSizePolicy.Ignored, QSizePolicy.MinimumExpanding), 4, 0)152         layout.addWidget(fileDialogOptionsWidget, 5, 0, 1 ,2)153         toolbox.addItem(page, "File Dialogs")154 155         page = QWidget()156         layout = QGridLayout(page)157         layout.setColumnStretch(1, 1)158         layout.addWidget(pushButton_critical, 0, 0)159         layout.addWidget(self.label_critical, 0, 1)160         layout.addWidget(pushButton_information, 1, 0)161         layout.addWidget(self.label_information, 1, 1)162         layout.addWidget(pushButton_question, 2, 0)163         layout.addWidget(self.label_question, 2, 1)164         layout.addWidget(pushButton_warning, 3, 0)165         layout.addWidget(self.label_warning, 3, 1)166         layout.addWidget(pushButton_error, 4, 0)167         layout.addWidget(self.label_error, 4, 1)168         layout.addItem(QSpacerItem(0, 0, QSizePolicy.Ignored, QSizePolicy.MinimumExpanding), 5, 0)169         toolbox.addItem(page, "Message Boxes")170         171         pushButton_integer.clicked.connect(self.setInteger) 172         pushButton_double.clicked.connect(self.setDouble) 173         pushButton_item.clicked.connect(self.setItem) 174         pushButton_text.clicked.connect(self.setText) 175         pushButton_multiLineText.clicked.connect(self.setMultiLineText) 176         pushButton_color.clicked.connect(self.setColor) 177         pushButton_font.clicked.connect(self.setFont) 178         pushButton_directory.clicked.connect(self.setExistingDirectory) 179         pushButton_openFileName.clicked.connect(self.setOpenFileName) 180         pushButton_openFileNames.clicked.connect(self.setOpenFileNames) 181         pushButton_saveFileName.clicked.connect(self.setSaveFileName) 182         pushButton_critical.clicked.connect(self.criticalMessage) 183         pushButton_information.clicked.connect(self.informationMessage) 184         pushButton_question.clicked.connect(self.questionMessage) 185         pushButton_warning.clicked.connect(self.warningMessage) 186         pushButton_error.clicked.connect(self.errorMessage) 187         188     #输入对话框 取整数189     def setInteger(self):190         intNum, ok = QInputDialog.getInt(self, "QInputDialog.getInteger()","Percentage:", 25, 0, 100, 1)191         if ok:192             self.label_integer.setText(str(intNum))193     194     #输入对话框 取实数195     def setDouble(self):196         doubleNum, ok = QInputDialog.getDouble(self, "QInputDialog.getDouble()", "Amount:", 37.56, -10000, 10000, 2)197         if ok:198             self.label_double.setText(str(doubleNum))199     200     #输入对话框 取列表项201     def setItem(self):202         items = ["Spring", "Summer", "Fall", "Winter"]203         item, ok = QInputDialog.getItem(self, "QInputDialog.getItem()","Season:", items, 0, False)204         if ok and item:205             self.label_item.setText(item)206     207     #输入对话框 取文本208     def setText(self):209         text, ok = QInputDialog.getText(self, "QInputDialog.getText()", "User name:", QLineEdit.Normal, QDir.home().dirName())210         if ok and text:211             self.label_text.setText(text)212     213     #输入对话框 取多行文本214     def setMultiLineText(self):215         text, ok = QInputDialog.getMultiLineText(self, "QInputDialog.getMultiLineText()", "Address:", "John Doe\nFreedom Street")216         if ok and text:217             self.label_multiLineText.setText(text)218     219     #颜色对话框 取颜色220     def setColor(self):221         #options = QColorDialog.ColorDialogOptions(QFlag.QFlag(colorDialogOptionsWidget.value()))222         color = QColorDialog.getColor(Qt.green, self, "Select Color")223 224         if color.isValid():225             self.label_color.setText(color.name())226             self.label_color.setPalette(QPalette(color))227             self.label_color.setAutoFillBackground(True)228     229     #字体对话框 取字体230     def setFont(self):231         #options = QFontDialog.FontDialogOptions(QFlag(fontDialogOptionsWidget.value()))232         #font, ok = QFontDialog.getFont(ok, QFont(self.label_font.text()), self, "Select Font",options)233         font, ok = QFontDialog.getFont()234         if ok:235             self.label_font.setText(font.key())236             self.label_font.setFont(font)237     238     #目录对话框 取目录239     def setExistingDirectory(self):240         #options = QFileDialog.Options(QFlag(fileDialogOptionsWidget->value()))241         #options |= QFileDialog.DontResolveSymlinks | QFileDialog.ShowDirsOnly242         directory = QFileDialog.getExistingDirectory(self,243                                     "QFileDialog.getExistingDirectory()",244                                     self.label_directory.text())245         if directory:246             self.label_directory.setText(directory)247     248     #打开文件对话框 取文件名249     def setOpenFileName(self):250         #options = QFileDialog.Options(QFlag(fileDialogOptionsWidget.value()))251         #selectedFilter252         fileName, filetype = QFileDialog.getOpenFileName(self,253                                     "QFileDialog.getOpenFileName()",254                                     self.label_openFileName.text(),255                                     "All Files (*);;Text Files (*.txt)")256         if fileName:257             self.label_openFileName.setText(fileName)258     259     #打开文件对话框 取一组文件名260     def setOpenFileNames(self):261         #options = QFileDialog.Options(QFlag(fileDialogOptionsWidget.value()))262         #selectedFilter263         openFilesPath = "D:/documents/pyMarksix/draw/"264         files, ok = QFileDialog.getOpenFileNames(self,265                                     "QFileDialog.getOpenFileNames()",266                                     openFilesPath,267                                     "All Files (*);;Text Files (*.txt)")268 269         if len(files):270             self.label_openFileNames.setText(", ".join(files))271     272     #保存文件对话框 取文件名273     def setSaveFileName(self):274         #options = QFileDialog.Options(QFlag(fileDialogOptionsWidget.value()))275         #selectedFilter276         fileName, ok = QFileDialog.getSaveFileName(self,277                                     "QFileDialog.getSaveFileName()",278                                     self.label_saveFileName.text(),279                                     "All Files (*);;Text Files (*.txt)")280         if fileName:281             self.label_saveFileName.setText(fileName)282         283     def criticalMessage(self):284         #reply = QMessageBox.StandardButton()285         MESSAGE = "批评!"286         reply = QMessageBox.critical(self,287                                     "QMessageBox.critical()",288                                     MESSAGE,289                                     QMessageBox.Abort | QMessageBox.Retry | QMessageBox.Ignore)290         if reply == QMessageBox.Abort:291             self.label_critical.setText("Abort")292         elif reply == QMessageBox.Retry:293             self.label_critical.setText("Retry")294         else:295             self.label_critical.setText("Ignore")296         297     def informationMessage(self):298         MESSAGE = "信息"299         reply = QMessageBox.information(self, "QMessageBox.information()", MESSAGE)300         if reply == QMessageBox.Ok:301             self.label_information.setText("OK")302         else:303             self.label_information.setText("Escape")304         305     def questionMessage(self):306         MESSAGE = "疑问"307         reply = QMessageBox.question(self, "QMessageBox.question()",308                                     MESSAGE,309                                     QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)310         if reply == QMessageBox.Yes:311             self.label_question.setText("Yes")312         elif reply == QMessageBox.No:313             self.label_question.setText("No")314         else:315             self.label_question.setText("Cancel")316         317     def warningMessage(self):318         MESSAGE = "警告文本"319         msgBox = QMessageBox(QMessageBox.Warning,320                             "QMessageBox.warning()",321                              MESSAGE,322                              QMessageBox.Retry | QMessageBox.Discard | QMessageBox.Cancel,323                              self)324         msgBox.setDetailedText("详细信息。。。")325         #msgBox.addButton("Save &Again", QMessageBox.AcceptRole)326         #msgBox.addButton("&Continue", QMessageBox.RejectRole)327         if msgBox.exec() == QMessageBox.AcceptRole:328             self.label_warning.setText("Retry")329         else:330             self.label_warning.setText("Abort")331         332     def errorMessage(self):333         self.errorMessageDialog.showMessage(334                    "This dialog shows and remembers error messages. "335                    "If the checkbox is checked (as it is by default), "336                    "the shown message will be shown again, "337                    "but if the user unchecks the box the message "338                    "will not appear again if QErrorMessage.showMessage() "339                    "is called with the same message.")340         self.label_error.setText("If the box is unchecked, the message "341                                "won‘t appear again.")342 343 app=QApplication(sys.argv)  344 form=StandardDialog()  345 form.show()  346 app.exec_()  

 

PyQt5标准对话框