wxPython - 文件选择对话框FileDialog
suiw9 2024-10-23 18:45 92 浏览 0 评论
实战wxPython系列-017
文件选择对话框通常在GUI程序用来选择一个或者多个文件,Window系统中提供基本的API来创建一个通用的文件的选择对话框,类似的,在PyQt/PySide,wxPython等Python GUI程序开发包中,也提供了类似的文件选择对话框,在wxPython中,实现文件选择对话框的类为wx.FileDialog。
一、wx.FileDialog简介
wx.FileDialog构造函数支持设置文件的缺省路径, 参数defaultDir指定要选择的文件所在的缺省文件夹,如果该参数为空白,则目录为当前文件夹;参数defaultFile为默认文件,如果该参数为空白,则不提供默认文件;参数wardcard为匹配通配符,wx.FileDialog允许用户选择一个或者多个文件,在使用通配符的情况下,可以让用户才只选择关心的文件。例如,"BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif"只会显示和选择图片后缀类型是bmp和gif 的文件;参数style则指定对话框的打开样式。这些样式包括:
- wx.FD_OPEN: 单个文件选择对话框;
- wx.FD_SAVE: 文件保存对话框;
- wx. FD_OVERWRITE_PROMPT: 只对保存对话框有效,当覆盖文件的时候,会弹出提醒对话框;
- wx.FD_MULTIPLE:只对打开对话框有效,支持选择多个文件;
- wx.FD_CHANGE_DIR:改变当前工作目录为用户选择的文件夹。
二、使用wx.FileDialog
wx.FileDialog的常用方法有:
- GetDirectory(self): 返回对话框默认的文件夹;
- GetFilename(self): 返回对话框默认的文件名;
- GetFilenames(self): 返回用户选择的文件列表;
- GetFileIndex(self): 返回通配符参数中提供的默认筛列表的索引(可选);
- GetMessage(self): 返回文件对话框的标题信息;
- GetPath(self): 返回选择的文件的全路径(包括文件路径和文件名);
- GetPaths(self): 在多选情况下,返回用户选择的文件全路径列表;
- GetWildcard(self): 返回通配符;
- SetDirectory(self, dir): 设置对话框默认的文件目录;SetFileName(self, name): 设置对话框默认的文件名;
- SetFilterIndex(self, filterIndex): 设置默认筛选器索引,从0开始;
- SetMessage(self, message): 设置对话框的标题信息;
- SetPath(self, path): 设置默认选择的文件全路径名;
- SetWildCard(self, wildcard): 设置对话框文件类型通配符;
- ShowModal(self): 显示对话框,如果点击了wx.OK按钮则返回wx.ID_OK,否则返回wx.ID_CANCEL。
打开文件对话框的典型用法如下:
def OnOpen(self, event):
if self.contentNotSaved:
if wx.MessageBox("Current content has not been saved! Proceed?", "Please confirm",
wx.ICON_QUESTION | wx.YES_NO, self) == wx.NO:
return
# otherwise ask the user what new file to open
with wx.FileDialog(self, "Open XYZ file", wildcard="XYZ files (*.xyz)|*.xyz",
style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:
if fileDialog.ShowModal() == wx.ID_CANCEL:
return # the user changed their mind
# Proceed loading the file chosen by the user
pathname = fileDialog.GetPath()
try:
with open(pathname, 'r') as file:
self.doLoadDataOrWhatever(file)
except IOError:
wx.LogError("Cannot open file '%s'." % newfile)
保存文件对话框的典型用法则更简单:
def OnSaveAs(self, event):
with wx.FileDialog(self, "Save XYZ file", wildcard="XYZ files (*.xyz)|*.xyz",
style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) as fileDialog:
if fileDialog.ShowModal() == wx.ID_CANCEL:
return # the user changed their mind
# save the current contents in the file
pathname = fileDialog.GetPath()
try:
with open(pathname, 'w') as file:
self.doSaveData(file)
except IOError:
wx.LogError("Cannot save current data in file '%s'." % pathname)
三、wx.FileDialog示例
下面的代码演示如何使用wx.FileDialog:
#文件选择对话框(FileDialog)
import wx
class SampleFileDialog(wx.Frame):
def __init__(self, *args, **kw):
super(SampleFileDialog, self).__init__(*args, **kw)
self.InitUi()
def InitUi(self):
#设置标题
self.SetTitle("实战wxPython: 文件选择对话框")
#设置窗口尺寸
self.SetSize(480, 360)
#设置窗口位置
self.SetPosition(wx.DefaultPosition)
#设置窗口样式
self.SetWindowStyle(wx.DEFAULT_FRAME_STYLE)
#创建状态栏
self.CreateStatusBar()
#创建菜单栏
self.BuildMenuBar()
self.Centre()
#===== 显示选中的文件名 =====#
label = wx.StaticText(self, -1, "当前选择的文件:")
self.txtBox = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE, size = (-1, 300))
#水平布局
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(label, 0, wx.ALL|wx.ALIGN_TOP)
sizer.Add(self.txtBox, 1, wx.ALL|wx.ALIGN_CENTER)
#向窗口中添加布局
#self.SetSizerAndFit(sizer)
self.SetSizer(sizer)
def BuildMenuBar(self):
mainMenuBar = wx.MenuBar()
fileMenu = wx.Menu()
openMenuItem = fileMenu.Append(-1, "打开单个文件")
self.Bind(wx.EVT_MENU, self.OpenSingleFile, openMenuItem)
saveMenuItem = fileMenu.Append(-1, "保存文件")
self.Bind(wx.EVT_MENU, self.SaveFile, saveMenuItem)
savePromptMenuItem = fileMenu.Append(-1, "保存文件及提示覆盖")
self.Bind(wx.EVT_MENU, self.SavePromptFile, savePromptMenuItem)
multipleOpenMenuItem = fileMenu.Append(-1,"多文件选择")
self.Bind(wx.EVT_MENU, self.MultipleSelectFiles, multipleOpenMenuItem)
mainMenuBar.Append(fileMenu, title="&文件")
self.SetMenuBar(mainMenuBar)
## wx.FileDialog style: wx.FD_OPEN
def OpenSingleFile(self, e):
fileFilter = "Image Files (*.bmp)|*.bmp|" "All files (*.*)|*.*"
fileDialog =wx.FileDialog(self, message="选择单个文件", wildcard=fileFilter, style=wx.FD_OPEN)
dialogResult = fileDialog.ShowModal()
if dialogResult != wx.ID_OK:
return
path = fileDialog.GetPath()
self.txtBox.SetLabel(path)
## wx.FileDialog style: wx.FD_SAVE
def SaveFile(self, e):
fileFilter = "Image Files (*.bmp)|*.bmp|" "All files (*.*)|*.*"
fileDialog =wx.FileDialog(self, message="保存文件", wildcard=fileFilter, style=wx.FD_SAVE)
dialogResult = fileDialog.ShowModal()
if dialogResult != wx.ID_OK:
return
path = fileDialog.GetPath()
self.txtBox.SetLabel(path)
## wx.FileDialog style: wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT
def SavePromptFile(self, e):
fileFilter = "Image Files (*.bmp)|*.bmp|" "All files (*.*)|*.*"
fileDialog =wx.FileDialog(self, message="保存&prompt文件", wildcard=fileFilter, style=wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
dialogResult = fileDialog.ShowModal()
if dialogResult != wx.ID_OK:
return
path = fileDialog.GetPath()
self.txtBox.SetLabel(path)
## wx.FileDialog style: wx.FD_OPEN | wx.FD_MULTIPLE
def MultipleSelectFiles(self, e):
fileFilter = "Image Files (*.bmp)|*.bmp|" "All files (*.*)|*.*"
fileDialog =wx.FileDialog(self, message="多文件选择", wildcard=fileFilter, style=wx.FD_OPEN|wx.FD_MULTIPLE)
dialogResult = fileDialog.ShowModal()
if dialogResult != wx.ID_OK:
return
paths = fileDialog.GetPaths()
for path in paths:
self.txtBox.AppendText(path + "\n")
def main():
app = wx.App()
sample = SampleFileDialog(None)
sample.Show()
app.MainLoop()
if __name__ == "__main__":
main()
在上面的示例中,我们创建一个主窗口,在主窗口中添加了四个菜单项,它们分别是:
- 选择单个文件, 其窗口样式参数为wx.FD_OPEN, 它演示了如何使用wx.FileDialog来获得一个要打开的文件名;
- 保存文件, 其窗口样式参数为wx.FA_SAVE, 它演示了如何使用wx.FileDialog来获得一个要保存的文件名;
- 保存文件并提醒,其窗口样式参数为wx.FA_SAVE| wx. FD_OVERWRITE_PROMPT, 它演示了如何使用wx.FileDialog在保存文件时,如果文件已存在,则显示提示信息;
- 多文件选择,其窗口样式参数为wx.FD_OPEN| wx.FD_MULTIPLE, 它演示了如何使用wx.FileDialog来进行多文件选择。
四、wx.FileSelector
调用wx.FileSelector全局方法, 可以弹出一个文件选择对话框,该方法的原型为:
wx.FileSelector(message, defautPath, defaultFile, defaultExtension, wildcard, flags, parent, x, y)
参数:
message: 文件选择器的标题。
defautPath: 默认路径,缺省为空白。
defaultFile:默认文件名,缺省为空白。
defaultExtension:默认文件扩展名,缺省为空白。
wildcard:通配符,缺省为“*.*”。
parent:父窗口。
x:选择器水平显示位置。
y:选择器垂直显示位置。
调用方法:
filename = wx.FileSelector("打开一个JAVA文件", "", "", "js", "All files(*.*)|*.*|JavaScript Files(*.js)|*.js|Text Files(*.txt)|*.txt", wx.FD_OPEN, self)
打开一个文件选择对话框,并在关闭对话框后返回文件名。
五、本文知识点
- 了解wx.FileDialog的基本功能和常用方法。
- 使用wx.FileDialog文件选择对话框进行文件选择交互。
- 调用调用wx.FileSelector全局方法。
相关推荐
- 俄罗斯的 HTTPS 也要被废了?(俄罗斯网站关闭)
-
发布该推文的ScottHelme是一名黑客,SecurityHeaders和ReportUri的创始人、Pluralsight作者、BBC常驻黑客。他表示,CAs现在似乎正在停止为俄罗斯域名颁发...
- 如何强制所有流量使用 HTTPS一网上用户
-
如何强制所有流量使用HTTPS一网上用户使用.htaccess强制流量到https的最常见方法可能是使用.htaccess重定向请求。.htaccess是一个简单的文本文件,简称为“.h...
- https和http的区别(https和http有何区别)
-
“HTTPS和HTTP都是数据传输的应用层协议,区别在于HTTPS比HTTP安全”。区别在哪里,我们接着往下看:...
- 快码住!带你十分钟搞懂HTTP与HTTPS协议及请求的区别
-
什么是协议?网络协议是计算机之间为了实现网络通信从而达成的一种“约定”或“规则”,正是因为这个“规则”的存在,不同厂商的生产设备、及不同操作系统组成的计算机之间,才可以实现通信。简单来说,计算机与网络...
- 简述HTTPS工作原理(简述https原理,以及与http的区别)
-
https是在http协议的基础上加了一层SSL(由网景公司开发),加密由ssl实现,它的目的是为用户提供对网站服务器的身份认证(需要CA),以至于保护交换数据的隐私和完整性,原理如图示。1、客户端发...
- 21、HTTPS 有几次握手和挥手?HTTPS 的原理什么是(高薪 常问)
-
HTTPS是3次握手和4次挥手,和HTTP是一样的。HTTPS的原理...
- 一次安全可靠的通信——HTTPS原理
-
为什么HTTPS协议就比HTTP安全呢?一次安全可靠的通信应该包含什么东西呢,这篇文章我会尝试讲清楚这些细节。Alice与Bob的通信...
- 为什么有的网站没有使用https(为什么有的网站点不开)
-
有的网站没有使用HTTPS的原因可能涉及多个方面,以下是.com、.top域名的一些见解:服务器性能限制:HTTPS使用公钥加密和私钥解密技术,这要求服务器具备足够的计算能力来处理加解密操作。如果服务...
- HTTPS是什么?加密原理和证书。SSL/TLS握手过程
-
秘钥的产生过程非对称加密...
- 图解HTTPS「转」(图解http 完整版 彩色版 pdf)
-
我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。...
- HTTP 和 HTTPS 有何不同?一文带你全面了解
-
随着互联网时代的高速发展,Web服务器和客户端之间的安全通信需求也越来越高。HTTP和HTTPS是两种广泛使用的Web通信协议。本文将介绍HTTP和HTTPS的区别,并探讨为什么HTTPS已成为We...
- HTTP与HTTPS的区别,详细介绍(http与https有什么区别)
-
HTTP与HTTPS介绍超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的...
- 一文让你轻松掌握 HTTPS(https详解)
-
一文让你轻松掌握HTTPS原文作者:UC国际研发泽原写在最前:欢迎你来到“UC国际技术”公众号,我们将为大家提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与翻译。...
- 如何在Spring Boot应用程序上启用HTTPS?
-
HTTPS是HTTP的安全版本,旨在提供传输层安全性(TLS)[安全套接字层(SSL)的后继产品],这是地址栏中的挂锁图标,用于在Web服务器和浏览器之间建立加密连接。HTTPS加密每个数据包以安全方...
- 一文彻底搞明白Http以及Https(http0)
-
早期以信息发布为主的Web1.0时代,HTTP已可以满足绝大部分需要。证书费用、服务器的计算资源都比较昂贵,作为HTTP安全扩展的HTTPS,通常只应用在登录、交易等少数环境中。但随着越来越多的重要...
你 发表评论:
欢迎- 一周热门
-
-
Linux:Ubuntu22.04上安装python3.11,简单易上手
-
宝马阿布达比分公司推出独特M4升级套件,整套升级约在20万
-
MATLAB中图片保存的五种方法(一)(matlab中保存图片命令)
-
别再傻傻搞不清楚Workstation Player和Workstation Pro的区别了
-
Linux上使用tinyproxy快速搭建HTTP/HTTPS代理器
-
如何提取、修改、强刷A卡bios a卡刷bios工具
-
Element Plus 的 Dialog 组件实现点击遮罩层不关闭对话框
-
日本组合“岚”将于2020年12月31日停止团体活动
-
SpringCloud OpenFeign 使用 okhttp 发送 HTTP 请求与 HTTP/2 探索
-
tinymce 号称富文本编辑器世界第一,大家同意么?
-
- 最近发表
- 标签列表
-
- dialog.js (57)
- importnew (44)
- windows93网页版 (44)
- yii2框架的优缺点 (45)
- tinyeditor (45)
- qt5.5 (60)
- windowsserver2016镜像下载 (52)
- okhttputils (51)
- android-gif-drawable (53)
- 时间轴插件 (56)
- docker systemd (65)
- slider.js (47)
- android webview缓存 (46)
- pagination.js (59)
- loadjs (62)
- openssl1.0.2 (48)
- velocity模板引擎 (48)
- pcre library (47)
- zabbix微信报警脚本 (63)
- jnetpcap (49)
- pdfrenderer (43)
- fastutil (48)
- uinavigationcontroller (53)
- bitbucket.org (44)
- python websocket-client (47)