zoukankan      html  css  js  c++  java
  • 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
    Freedom 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.ShowDirsOnly
    242         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         #selectedFilter
    252         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         #selectedFilter
    263         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         #selectedFilter
    276         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_()  
  • 相关阅读:
    python基础7
    python基础7
    十大经典预测算法(一)----线性回归
    RNN-循环神经网络
    CNN之经典卷积网络框架原理
    卷积神经网络CNN
    决策树的生成
    欠拟合、过拟合及解决方法
    决策树
    KD树
  • 原文地址:https://www.cnblogs.com/hhh5460/p/4271475.html
Copyright © 2011-2022 走看看