加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python PyQt5标准对话框用法示例

发布时间:2020-12-17 08:09:31 所属栏目:Python 来源:网络整理
导读:本篇章节讲解Python PyQt5标准对话框用法。供大家参考研究具体如下: 很全的Qt的标准对话框,包含QInputDialog、QColorDialog、QFontDialog、QMessageBox、QOpenFileDialog... 全部是由官网的C++版本,转换成PyQt5版本。 有些细节忽略了,因为实在

本篇章节讲解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 DoenFreedom 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程序设计有所帮助。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读