前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PySide6 GUI 编程(27):QFileDialog的简单使用

PySide6 GUI 编程(27):QFileDialog的简单使用

原创
作者头像
bowenerchen
发布2024-08-21 10:00:11
1591
发布2024-08-21 10:00:11
举报
文章被收录于专栏:编码视界

QFileDialog 的常见用法

用法示例

代码语言:python
代码运行次数:0
复制
    def choose_single_local_file(self):
        filters_str, default_filter = get_filters()
        ret = QFileDialog.getOpenFileName(self, 'Open File', './', filters_str, default_filter)
        print('选择单个本地文件', ret)

    def choose_multiple_local_files(self):
        filters_str, default_filter = get_filters()
        ret = QFileDialog.getOpenFileNames(self, 'Open Files', './', filters_str, default_filter)
        print('选择多个本地文件', ret)

    def choose_single_save_file(self):
        filters_str, default_filter = get_save_format()
        ret = QFileDialog.getSaveFileName(self, 'Save File', './', filters_str, default_filter)
        print('选择单个保存文件', ret)

    def choose_single_folder(self):
        ret = QFileDialog.getExistingDirectory(self, 'Save Folder', './',
                                               options = QFileDialog.Option.ReadOnly | QFileDialog.Option.ShowDirsOnly)
        print('选择保存文件夹', ret)

完整代码

代码语言:python
代码运行次数:0
复制
from __future__ import annotations

import sys
from datetime import datetime
from typing import Tuple

from PySide6.QtWidgets import QApplication, QFileDialog, QMainWindow, QPushButton, QVBoxLayout, QWidget


def get_time_str() -> str:
    return datetime.now().isoformat(sep = ' ')


def get_filters() -> Tuple[str, str]:
    my_filters = [
        'All Files (*)',
        'Text Files (*.txt)',
        'Python Files (*.py)',
        'Image Files (*.png *.jpg *.bmp)',
        'Video Files (*.mp4 *.avi)',
        'Audio Files (*.mp3 *.wav)',
        'PDF Files (*.pdf)',
        'Json Files (*.json)',
        'Excel Files (*.xls *.xlsx)',
        'Markdown Files (*.md)',
        'Word Files (*.doc *.docx)',
        'PowerPoint Files (*.ppt *.pptx)',
        'HTML Files (*.html)',
        'CSS Files (*.css)',
        'JavaScript Files (*.js)',
    ]
    # 将 my_filters 转换为字符串列表,并以;;分隔
    my_filters_str = ';;'.join(my_filters)
    return my_filters_str, my_filters[2]


def get_save_format() -> Tuple[str, str]:
    my_filters = [
        'Text Files (*.txt)',
        'Python Files (*.py)',
        'Image Files PNG (*.png)',
        'Image Files JPG (*.jpg)',
        'Image Files BMP (*.bmp)',
        'Video Files MP4(*.mp4)',
        'Video Files AVI(*.avi)',
        'Audio Files MP3(*.mp3)',
        'Audio Files WAV(*.wav)',
        'PDF Files (*.pdf)',
        'Json Files (*.json)',
        'Excel Files (*.xls)',
        'Excel Files (*.xlsx)',
        'Markdown Files (*.md)',
        'Word Files (*.doc)',
        'Word Files (*.docx)',
        'PowerPoint Files (*.ppt)',
        'PowerPoint Files (*.pptx)',
        'HTML Files (*.html)',
        'CSS Files (*.css)',
        'JavaScript Files (*.js)',
    ]
    # 将 my_filters 转换为字符串列表,并以;;分隔
    my_filters_str = ';;'.join(my_filters)
    return my_filters_str, my_filters[0]


class MyMainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Hello, PySide6!')
        self.setToolTip('A PySide6 GUI Application Demo')

        self.open_single_file_button = QPushButton('选择单个文件')
        self.open_single_file_button.clicked.connect(self.choose_single_local_file)

        self.open_multiple_files_button = QPushButton('选择多个文件')
        self.open_multiple_files_button.clicked.connect(self.choose_multiple_local_files)

        self.save_single_file_button = QPushButton('保存单个文件')
        self.save_single_file_button.clicked.connect(self.choose_single_save_file)

        self.save_folder_button = QPushButton('选择文件夹')
        self.save_folder_button.clicked.connect(self.choose_single_folder)

        v_layout = QVBoxLayout()
        v_layout.addWidget(self.open_single_file_button)
        v_layout.addWidget(self.open_multiple_files_button)
        v_layout.addWidget(self.save_single_file_button)
        v_layout.addWidget(self.save_folder_button)

        container = QWidget()
        container.setLayout(v_layout)

        self.setCentralWidget(container)

    def choose_single_local_file(self):
        filters_str, default_filter = get_filters()
        ret = QFileDialog.getOpenFileName(self, 'Open File', './', filters_str, default_filter)
        print('选择单个本地文件', ret)

    def choose_multiple_local_files(self):
        filters_str, default_filter = get_filters()
        ret = QFileDialog.getOpenFileNames(self, 'Open Files', './', filters_str, default_filter)
        print('选择多个本地文件', ret)

    def choose_single_save_file(self):
        filters_str, default_filter = get_save_format()
        ret = QFileDialog.getSaveFileName(self, 'Save File', './', filters_str, default_filter)
        print('选择单个保存文件', ret)

    def choose_single_folder(self):
        ret = QFileDialog.getExistingDirectory(self, 'Save Folder', './',
                                               options = QFileDialog.Option.ReadOnly | QFileDialog.Option.ShowDirsOnly)
        print('选择保存文件夹', ret)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyMainWindow()
    window.show()
    app.exec()

运行效果

静态效果

静态界面效果
静态界面效果

选择本地的单个文件

选择本地文件
选择本地文件
自定义文件格式过滤条件
自定义文件格式过滤条件

选择多个本地文件

选择多个本地文件
选择多个本地文件

保存文件

保存文件
保存文件
自定义保存文件的格式选项
自定义保存文件的格式选项

选择文件夹

选择本地文件夹
选择本地文件夹

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • QFileDialog 的常见用法
    • 用法示例
      • 完整代码
      • 运行效果
        • 静态效果
          • 选择本地的单个文件
            • 选择多个本地文件
              • 保存文件
                • 选择文件夹
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档