Python操作文件对话框——wxPython


前段时间学习操作excel的时候就想找一个操作文件对话框的方法,网上搜了很多都是借助tinker打开的,这种方式我感觉运行稍稍有些慢了,而且会有一个额外的root窗口,当然可以关闭,但比较繁琐。涉及到多文件选择的情况也没办法去处理。

今天在看wxpython模块,发现也有文件对话框操作,而且比较简洁好用,所以在这里记录一下。

依赖:

pip install wxpython

1、创建app和frame对象

app = wx.App()
frame = wx.Frame(None, title="", pos=(0, 0), size=(100, 100))

这一步只是因为wx.FileDialog方法需要基于父容器对象创建,这里我选择创建一个frame,这里的pos、size等参数设置什么值都可以,主要是创建这样一个对象。不会存在多余的窗口。
注意:app对象必须先创建且必须有变量接受,不然会出现下面的错误。

wx._core.PyNoAppError: The wx.App object must be created first!

2、创建文件对话框

dlg = wx.FileDialog(parent=frame, message="多文件选择",
                        defaultDir=os.getcwd(),
                        style=wx.FD_MULTIPLE,
                        wildcard="All files*.*|*.*")

参数说明:

  • parent:父容器,这里使用上面创建的frame
  • message:对话框标题
  • defaultDir:默认目录
  • defaultFile:默认文件
  • wildcard:文件过滤器, 格式其实很简单 “显示名称|匹配类型”为一组,设置多组时继续用 | 隔开就好。
  • style:文件对话框类型
类型说明
wx.FD_OPEN文件选择对话框,用于单文件选择
wx.FD_MULTIPLE文件选择对话框,用于多文件选择
wx.FD_CHANGE_DIR文件选择对话框,用户选择文件后会改变默认目录
wx.FD_SAVE文件保存对话框,用于多文件选择
wx.FD_OVERWRITE_PROMPT搭配文件保存对话框使用,文件已存在时会提示覆盖

wx.FD_OVERWRITE_PROMPT例: wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT

3、显示对话框,获取选择的文件

if dlg.ShowModal() == wx.ID_OK:
   filename = dlg.GetPaths()
   print(filename)
dlg.Destroy()

注意:dlg.GetPaths方法只能在wx.FD_MULTIPLE类型时才能使用,单文件选择需要使用dlg.GetPath方法。

其实已经有了很多wxpython文件操作的博客,但是大部分都是基于集成wx.frame来操作的,当我们只需要选择文件获取路径时,像我这样操作就已经可以了。

完整代码:

import os
import wx
app = wx.App()

def openFileDialog(style=wx.FD_OPEN, message="选择文件", defaultDir=os.getcwd(), wildcard="All files(*.*)|*.*"):
    frame = wx.Frame(None, title="", pos=(0, 0), size=(100, 100))
    dlg = wx.FileDialog(parent=frame, message=message,
                        defaultDir=defaultDir,
                        style=style,
                        wildcard=wildcard)
    if dlg.ShowModal() == wx.ID_OK:
        if style == wx.FD_MULTIPLE:
            return dlg.GetPaths()
        return dlg.GetPath()
    dlg.Destroy()
    return None
print(openFileDialog(wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT))

我这里稍微封装了一下,返回选择的路径。
欢迎大家留言探讨。


总结参考博客:https://blog.csdn.net/weixin_30871293/article/details/96099514
更多参考:https://www.cnblogs.com/math98/p/14221551.html

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐