wxPython 文件对话框的使用详解
1、使用编辑器将以下代码录入,这些代码通常可以看作是使用wxPython进行GUI编程的初始固定代码,我们主要修改的是GUI框架类的内容。

2、初始代码程序运行如图

1、修改上述代码OnOpen(self, event)方法
wx.FileDialog的构造器语法为:
wx.FileDialog(parent, message="对话框标题", defaultDir='默认目录', defaultFile='默认文件', wildcard='*.*', style=0)
要显示文件对话框,必须使用ShowModal()方法。

1、parent:对话框父窗口,如果没有则为None
2、defaultDir:默认目录,建议置空,这将使程序在视窗系统上使用默认当前用户的“文档”目录
3、defaultFile:默认文件名,建议在打开文件时置空,在保存文件是设置默认文件名,以便让你的程序更加人性化,大部分视窗程序都是这样做的。
4、wildcard:打开或保存文件的通配符,为了代码重构,建议设置为类属性,毕竟打开和保存都会用到。
通配符定义格式为:
wildcard='文本文件(*.txt)|*.txt|所有文件(*.*)|*.*'
5、style:对话框样式,主要有以下几种:
wx.CHANGE_DIR:当用户选择文件后,当前工作目录相应改变到文件位置
wx.MULTIPLE:只适用于打开对话框,此样式可以让用户一次选择多个文件
wx.OPEN:用于打开一个文件
wx.OVERWRITE_PROMPT:只适用于保存文件对话框,用于显示一个提示确认覆盖文件,如果此文件已经存在
wx.SAVE:用于保存文件
1、和打开文件对话框基本相同

1、本文没有谈及保存对话框,那是因为保存都是针对已知文件名的处理,对于非已知文件名的内容均为另存为哦
1、#!/usr/bin/env python3
# encoding: utf-8
'''
Created on 2018年8月24日
@author: bdwjh
'''
import wx # 导入wxPython
import os
class Frame(wx.Frame): # 定义GUI框架类
wildcard='文本文件(*.txt)|*.txt|所有文件(*.*)|*.*'
# 框架初始化方法
def __init__(self, parent=None, id=-1, pos=wx.DefaultPosition,
title='wxPython 文件对话框使用详解'):
wx.Frame.__init__(self, parent, id, title,
pos, size=(600, 300))
self.panel = wx.Panel(self)
self.openBtn = wx.Button(self.panel, -1, '打开', pos=(50, 100))
self.openBtn.Bind(wx.EVT_BUTTON, self.OnOpen)
self.saveAsBtn = wx.Button(self.panel, -1, '另存为', pos=(150, 100))
self.saveAsBtn.Bind(wx.EVT_BUTTON, self.OnSaveAs)
def OnOpen(self, event):
dlg = wx.FileDialog(self, message='打开文件',
defaultDir='',
defaultFile='',
wildcard=self.wildcard,
style=wx.FD_OPEN)
if dlg.ShowModal() == wx.ID_OK:
file = dlg.GetPath()
print(file)
dlg.Destroy()
def OnSaveAs(self, event):
dlg = wx.FileDialog(self, '另存为', os.getcwd(),
defaultFile='我的文件.txt',
style=wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT,
wildcard=self.wildcard)
if dlg.ShowModal() == wx.ID_OK:
file = dlg.GetPath()
print(file)
dlg.Destroy()
class App(wx.App): # 定义应用程序类
def OnInit(self): # 类初始化方法
self.frame = Frame()
self.frame.Show(True)
self.SetTopWindow(self.frame) # 设置顶层框架
return True
def main(): # 定义主函数用于启动GUI界面
app = App()
app.MainLoop()
if __name__ == '__main__': # 使用__name__检测当前模块
main()