专栏首页王荣胜的专栏文章分享[PySimpleGUI界面学习](六)一个文件浏览对话框

[PySimpleGUI界面学习](六)一个文件浏览对话框

<!--more--> # 回顾 在前几篇文章中,我们分析了用 `PySimpleGUI` 这个工具包来创建界面的基本方法,并且探讨了一些具体的细节问题,如果读者能一一理解前面的内容,那么接下来我们就要用这个工具包来展示一个常用的文件浏览对话框。 # 文件浏览对话框 我们的日常应用中,经常会要打开或是保存某个文件,在特定的软件中,比如办公软件中,经常要用打开、保存等对话框来供用户来选择文件存放位置,在PySimpleGUi这个工具包中,创建文件对话框是很容易的一件事,下面代码可以弹出该对话框: ```python import PySimpleGUI as sg import sys if len(sys.argv) == 1: event, values = sg.Window("我的脚本对话框").Layout([[sg.Text("打开文档")], [sg.Input(), sg.FileBrowse()], [sg.Button("打开"), sg.Button("退出")]]).Read() fname = values[0] else: fname = sys.argv[1] try: if not fname: sg.Popup("关闭", "没有提供文件名!") raise SystemExit("程序关闭:没有提供文件名") print("你要打开的文件名是:",fname) except SystemExit as err: print(err) print("系统输入:", sys.argv) ``` 这段代码既可以在命令行运行,也可以直接在Python环境下运行,如果用命令行来执行,带有文件名参数时,运行如下图所示: <a href="https://s2.ax1x.com/2020/02/06/1y0pXq.png" class="highslide" onclick="return hs.expand(this,{slideshowGroup:'images'})"><img src="https://s2.ax1x.com/2020/02/06/1y0pXq.png" alt="1y0pXq.png" border="0" /></a> 如果不带参数在命令行下运行,则会弹出对话框如下图所示: <a href="https://s2.ax1x.com/2020/02/06/1y0i7T.png" class="highslide" onclick="return hs.expand(this,{slideshowGroup:'images'})"><img src="https://s2.ax1x.com/2020/02/06/1y0i7T.png" alt="1y0i7T.png" border="0" /></a> 在点击 `browse` 按钮时,程序将弹出文件选择对话框供用户选择,当选中某文件后,该文件的名称自动会填充入此按钮左边的文本输入框,如图所示: <a href="https://s2.ax1x.com/2020/02/06/1y0Y3d.png" class="highslide" onclick="return hs.expand(this,{slideshowGroup:'images'})"><img src="https://s2.ax1x.com/2020/02/06/1y0Y3d.png" alt="1y0Y3d.png" border="0" /></a> 在选中文件后,其路径将自动填充在文本输入框中: <a href="https://s2.ax1x.com/2020/02/06/1yBPxA.png" class="highslide" onclick="return hs.expand(this,{slideshowGroup:'images'})"><img src="https://s2.ax1x.com/2020/02/06/1yBPxA.png" alt="1yBPxA.png" border="0" /></a> # 分析 对于该对话框程序进行仔细分析后,会发现该程序既可以在命令行运行,也可提供对话框界面让用户输入,一种代码,两种运行方式,相当酷。 这里面主要用到了一个 `sys` 的包,这个包里提供一些命令行输入参数等的调用,在该程序中,主要用到了`sys.argv` 这个变量,该变量是一个 `list` ,其第1个元素是当前运行的脚本名称,这可以从我们程序的最后打印语句中看到,从第2个元素开始,就是在命令窗口运行该命令时紧跟其后的参数,本程序中将其带的第1个参数认定为要打开的文件名。 需要注意的是,程序中用到了 `try...catch...` 语句,而且在对话框弹出后,用户依然没有选择文件而点击打开按钮时,程序将弹出 `SystemExit` 告警信息,然后在`catch` 中进行捕获该异常,将其附带的告警字符串打印出来,这种方式使得程序更加健壮,告警信息如图: <a href="https://s2.ax1x.com/2020/02/06/1yBuGQ.png" class="highslide" onclick="return hs.expand(this,{slideshowGroup:'images'})"><img src="https://s2.ax1x.com/2020/02/06/1yBuGQ.png" alt="1yBuGQ.png" border="0" /></a> 在该程序中,还有值得注意的地方是,在界面元素设定中,只要将一个 `InputText()` 元素和 `FileBrowse()` 放置一起,则后者调用后的返回值自动关联到前一个文本输入框中,这是非常方便的一种试,无须手动绑定。 根据测试可知, `FileBrowse()` 只将其返回的文件路径放置在离它最近的一个文本框中,下图明显提示了这一特点: <a href="https://s2.ax1x.com/2020/02/06/1yBdz9.png" class="highslide" onclick="return hs.expand(this,{slideshowGroup:'images'})"><img src="https://s2.ax1x.com/2020/02/06/1yBdz9.png" alt="1yBdz9.png" border="0" /></a> # 小结 本篇探讨的小程序虽然简单,但是 **麻雀虽小,五脏俱全**,不但同时提供了两种运行方式,而且还有设置抛出异常并主动捕获,这些方式需要仔细研究才能领会。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [PySimpleGUI界面学习](十二)绘图功能的研究

    <!--more--> # 简述 绘图是图形用户界面的一种最常用功能之一,将复杂的几何图形、建筑设计图、天体运行轨迹等等展示在图形界面上,无疑会更便于观察,这...

    王荣胜
  • 利用宝塔对服务器进行管理和操作

    <!--more--> <a href="http%3A%2F%2Fimg.yzt-tools.com%2F20190516%2F20a36619bc298c6...

    王荣胜
  • 将typecho博客的index.php 隐藏起来,让链接简洁好看

    使用过typecho博客都知道,博客链接中会默认出现index.php/, 为了简洁好看,让我们动手隐藏它吧

    王荣胜
  • 【每日一题】问题 1255: 能量项链

    在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有 N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的...

    编程范 源代码公司
  • 业界 | 装着IBM大脑的悬浮机器人将飞向太空!

    下一个通往国际空间站的飞船装载着近3吨的研究和补给材料,里面包括了通常你能想到的东西,比如沉淀物研究材料,一个植物用温度计,一个给巨型机器人Canadarm的替...

    大数据文摘
  • 628笔试题

    第一次输出[9,2,3] [9,2,3],第二次输出[4,5,6] [9,2,3]

    不作声
  • VIM之个性化配置 .vimrc

    贴一个自己常用的vim配置文件,个人感觉这些配置不算臃肿,对于运维已经基本够用了。

    二狗不要跑
  • 小白博客 爆破内网mysql数据库root密码脚本代码

    <?php set_time_limit(0); $host=explode("n",@$_POST['host']); $name=explode("n",@...

    奶糖味的代言
  • prefetch错误https

    查看sra-tools版本是否最新版 可以重新安装最新版或建立新的环境安装最新,建议删除。

    Y大宽
  • 企业级memcached缓存数据库结合php使用与web管理memcached

    环境 [root@cache01 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Cor...

    863987322

扫码关注云+社区

领取腾讯云代金券