PyQt5 – QFileDialog小工具

PyQt5 – QFileDialog小工具

这个小组件是一个文件选择器对话框。它使用户能够在文件系统中导航并选择一个文件来打开或保存。对话框可以通过静态函数或在对话框对象上调用exec_()函数来调用。

QFileDialog类的静态函数(getOpenFileName()和getSaveFileName())调用当前操作系统的本地文件对话框。

还可以应用一个文件过滤器,只显示指定扩展名的文件。还可以设置起始目录和默认文件名。

下表列出了QFileDialog类的重要方法和枚举。

Sr.No. 方法和描述
1 getOpenFileName() 返回用户选择打开的文件的名称。
2 getSaveFileName() 使用用户选择的文件名来保存文件
3 setacceptMode() 决定文件框是作为打开还是保存对话框 QFileDialog.AcceptOpen QFileDialog.AcceptSave
4 setFileMode() 可选择文件的类型。枚举的常数有 – QFileDialog.AnyFile QFileDialog.ExistingFile QFileDialog.Directory QFileDialog.ExistingFiles
5 setFilter() 只显示那些有提到的扩展名的文件

示例

在下面的例子中演示了调用文件对话框的两种方法。

第一个按钮通过静态方法调用文件对话框。

fname = QFileDialog.getOpenFileName(self, 'Open file', 
   'c:\\',"Image files (*.jpg *.gif)")

选定的图像文件被显示在一个标签部件上。第二个按钮通过调用QFileDialog对象的exec_()方法来调用文件对话框。

dlg = QFileDialog()
dlg.setFileMode(QFileDialog.AnyFile)
dlg.setFilter("Text files (*.txt)")
filenames = QStringList()

   if dlg.exec_():
      filenames = dlg.selectedFiles()

所选文件的内容会显示在TextEdit小组件中。

f = open(filenames[0], 'r')
   with f:
      data = f.read()
      self.contents.setText(data)

完整的代码如下-

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class filedialogdemo(QWidget):
   def __init__(self, parent = None):
      super(filedialogdemo, self).__init__(parent)

      layout = QVBoxLayout()
      self.btn = QPushButton("QFileDialog static method demo")
      self.btn.clicked.connect(self.getfile)

      layout.addWidget(self.btn)
      self.le = QLabel("Hello")

      layout.addWidget(self.le)
      self.btn1 = QPushButton("QFileDialog object")
      self.btn1.clicked.connect(self.getfiles)
      layout.addWidget(self.btn1)

      self.contents = QTextEdit()
      layout.addWidget(self.contents)
      self.setLayout(layout)
      self.setWindowTitle("File Dialog demo")

   def getfile(self):
      fname = QFileDialog.getOpenFileName(self, 'Open file', 
         'c:\\',"Image files (*.jpg *.gif)")
      self.le.setPixmap(QPixmap(fname))

   def getfiles(self):
      dlg = QFileDialog()
      dlg.setFileMode(QFileDialog.AnyFile)
      dlg.setFilter("Text files (*.txt)")
      filenames = QStringList()

      if dlg.exec_():
         filenames = dlg.selectedFiles()
         f = open(filenames[0], 'r')

         with f:
            data = f.read()
            self.contents.setText(data)

def main():
   app = QApplication(sys.argv)
   ex = filedialogdemo()
   ex.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   main()

上述代码产生了以下输出 —

PyQt5 - QFileDialog小工具

PyQt5 - QFileDialog小工具

PyQt5 - QFileDialog小工具

exec_()方法的完整代码如下所示

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class CustomDialog(QFileDialog):

   def __init__(self, *args, **kwargs):
      super(CustomDialog, self).__init__(*args, **kwargs)

      self.setWindowTitle("HELLO!")

      QBtn = QDialogButtonBox.Ok | QDialogButtonBox.Cancel

      self.buttonBox = QDialogButtonBox(QBtn)
      self.buttonBox.accepted.connect(self.accept)
      self.buttonBox.rejected.connect(self.reject)

      self.layout = QVBoxLayout()
      self.layout.addWidget(self.buttonBox)
      self.setLayout(self.layout)

class filedialogdemo(QWidget):
   def __init__(self, parent = None):

      super(filedialogdemo, self).__init__(parent)

      layout = QVBoxLayout()

      self.btn1 = QPushButton("QFileDialog object")
      self.btn1.clicked.connect(self.getfiles)
      layout.addWidget(self.btn1)

      self.contents = QTextEdit()
      layout.addWidget(self.contents)
      self.setLayout(layout)
      self.setWindowTitle("File Dialog demo")

   def getfiles(self, s):
      print("click", s)
      dlg = CustomDialog(self)
      if dlg.exec_():
      filenames = dlg.selectedFiles()
      f = open(filenames[0], 'r')

      with f:
         data = f.read()
         self.contents.setText(data)
def main():

   app = QApplication(sys.argv)
   ex = filedialogdemo()
   ex.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   main()

上述代码产生了以下输出 —

PyQt5 - QFileDialog小工具

所选文件中的文本将显示在TextEdit控件中。

PyQt5 - QFileDialog小工具

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程