[PySimpleGUI界面学习](一)安装及简单说明
- 2020 年 3 月 12 日
- 筆記
# 一、界面编程到底是什么? 关于程序设计,有太多的书来描述,那么界面编程又是什么东西呢? 当你学习完一本程序设计的书本时,一般情况下都学会了某个编程语言的一些基本流程,而在学习的过程中,无须牵扯到界面编程,无论是获取用户的字符输入还是文件读写甚或是线程操作等等,都只需在命令窗口执行你写的代码就好。然而,在计算机的发展史上,终于还是出现了界面,发展至今,从个人电脑到手机,从各种各样的测试台到所有智能设备,用户操作界面无处不在,优秀的界面不但承载着人类方便的命令输入,也从最初的展示收集部件发展到现在的动态、智能、并具备收集人类各种有意识和潜意识状态的工具,其细化程度之繁杂,令人叹为观止。 界面指的是用户界面,此用户是指那些非专业程序员的客户。计算机的迅猛发展,可以解放人类的劳动力,各行各业都有各种需求,但是对于非专业程序员而言,面对命令窗口这种沉默的怪物,那种不友好是可想而知的,于是从人类自身出发,手、眼、语言等功能性的外延就成了界面设计的最初构想,在友好的界面上,即使对计算机再陌生的人,也会按照傻瓜式的指导一步步完成其想要完成的任务,而程序员要做的就是将用户当成完全不懂计算机的人来制作界面,这种自以为是的程序员和不懂计算机的小白客户之间于是就会产生各种各样的不理解,这种互动性直接催生了界面的规范化操作。
# 二、PySimpleGUI是什么? 然而从程序员的角度来看,**所有的界面只不过是一堆零部件的组合,其功能也只是收集数据而已!**基于这样的观点,PySimpleGUI这个Python的工具包就开发出来了,这个工具包的目的就是要将这种界面设计哲学实现出来,使得程序员从繁杂的重复性代码书写中解脱出来,让他们的精力不再花费于那些琐碎的开发,更加专注于界面的搭配及功能实现,从这个角度来看,这不得不说是界面编程的一场革命。 目前比较主流的几种界面工具包有wxWidget,Qt,Tcl/Tk等等,Python自带Tck/Tk工具包,正如同上述,这些工具包的使用都要摆出一些架式,熟悉的程序员当然不觉得怎样,但是对于新手而言,这些东西的每一步学习都是比较吃力的,于是一种符合人性化的哲学出来的时候,必然有许多天才程序员开始为这种哲学努力,即用统一的形式将这些主流工具包一一包装,使得程序员在利用这种统一包装语言进行编程的时候,无须考虑各种界面库的不同名称、不同方法以及不同语法,这种统一化的编程方式一经推出,即得到相当多程序员的关注,毕竟,对规律化东西的追求根植于我们人类的天性之中。 需要强调的是:**PySimpleGUI不是一个独立的界面工具包,它只是提供一种人性化的统一调度接口,在Python下,默认调用Tkinter**。
# 三、PySimpleGUI的安装 在Windows下,首先推荐安装Python3.6以上的版本,至于为什么不是Python2.7或其他,那是因为从对汉字的处理方式来看,Python3版本比Python2版本要方便(不要问我是如何知道的,当然还有许多其他的区别),而从进化来看,Python3肯定是版本越高越好,也许最新的版本可能会有一些小问题,但是能解决的问题还是问题吗?人活着不就是为了解决问题来的吗? Python3.6自带pip版本,用pip来安装的命令如下: “`cmd pip3 install PySimpleGUI “` 在linux下,需要将pip换成pip3,因为一般linux下默认安装的python版本是2。
# 四、一个简单的界面小程序。 先来一个直观的吧,如果你看懂了,恭喜你,你真的具备编程天赋!没有看明白?没关系,好吧,开始这个程序的分析。 “`python import PySimpleGUI as sg layout = [[sg.Text('输入你的名字'),sg.InputText()],[sg.OK()]] window = sg.Window('我的第一个GUI窗口').Layout(layout) button,(name,) = window.Read() window.Close() “` 将上述代码复制到你的ipython窗口/jupyter notebook窗口/vscode窗口/idle都是可以的,然后回车即可产生一个小窗口,当你在窗口中输入名字后,按OK按钮窗口即关闭。 <a href="https://s2.ax1x.com/2020/01/18/1pEX5T.png" class="highslide" onclick="return hs.expand(this,{slideshowGroup:'images'})"><img src="https://s2.ax1x.com/2020/01/18/1pEX5T.png" alt="1pEX5T.png" border="0" /></a>