GUI的演化和python编程——Python学习笔记之二十二

写完了有关长寿的两篇博文,本该去完成哥德尔那个命题六的。对计算机图形界面的好奇,让我把注意力暂时离开那个高度抽象难读的哥德尔,给转到计算机语言的python中来了。在python之中竟然有个图形界面的tkinter,它是什么?它从哪儿来?这引发我大大的兴趣。我要弄明白这个图形界面的GUI,究竟是个什么东西?能弄明白的就去弄明白,弄不明白的,只要你想弄明白,大概总可能弄明白。
这就开始了本篇博文。
GUI的图片表述

一、从自然语言,电视到图形用户界面GUI

计算机语言是一种让你感到奇异的语言种类,既不是母语那个类型,也不是外语那个类型。上帝给这个世界创造出各种各样的语言,于是全世界的人就捏不到一块去。那个通天的巴比塔,也就永远也建立不起来。但是,上帝却没有创造出计算机语言,计算机语言全都是人造的。我所接触的python,那就是一个人造的语言。
上帝造的语言似乎都是用来进行人际交流的,所以它有口语,有言谈。计算机语言似乎没有口语,绝不用来交谈,似乎最主要是用来保证人对机器的控制。所以,它只有字符指令。所谓人机对话那也只是近几年的事,而且,这个对话也一定和人际之间的对话区别甚大。至少,人与人之间的对话是有感情色彩的,机器哪里会掺和上什么感情色彩?
我们常惊异于自己的自然语言,魔幻无穷,神奇深邃。就是那么几千个词汇,却道尽了这人世间的千奇百怪,炎凉春秋,还引发人对于历史未来,还有存在的无尽思考。而且,这个用来描述所有自然世界和内心世界的各种自然语言,似乎还具有永恒的品质,它取之不尽且用之不竭。
但科学产生之后,在自然语言基础之上,出现了描述科学的人工语言,一套套抽象古怪的符号系统。而到了20世纪后半叶,又一类人工语言,计算机语言降临人间。这类语言,应该属于人工语言中的一个特异品类。仅就计算机语言中的python而言,其语言的特异,特别表现在它借助网络而获得的链接扩展,由此而不断展现出的表达能力上。
人类对于信息的传播,首先当然是使用自然语言。但机器出现之后,声音的传播有了留声机,然后有了电话。文字的传播有了电报,然后有了计算机。但图像视频的传播,却比计算机出现得早,计算机产生之前的20世纪20年代,英国人贝尔德发明了电视,图像视频的电视传播时代,也称为屏幕时代应该由此而开始。
贝尔德的电视(来自百度)

有趣的是,电视时代还不是真正的屏幕时代。计算机早期的字符界面,也不是真正的屏幕时代。
计算机的字符界面图(来自知乎)

当你学习python语言,学到要开始自己编程的那个阶段时,你立刻就发现,python语言的编程,在基本概念的铺垫之后,就是三个大写字母GUI所构成的一个知识系统,称作图形用户界面。这个界面系统的成型,才真正象征着人类的屏幕时代。

二、GUI(Graphical User Interface)的今生今世
我们这一辈历经折腾,但最为幸运的一点,是差不多见证了人类电子时代的全过程。至少是这几十年的改革开放,让我们见证了这个神奇的GUI,它在今生今世的点点滴滴。
人类的发明是商业驱动还是兴趣驱动,或者是战争驱动?大概都有可能。有些发明虽然很小很小,看似是一个完全可以忽略不计的雕虫小技,却会带来科技领域的连带效应。回看GUI的成型过程,这一点特别明显。一个了不起的时代,也许就是一个小小的发明促成的。
人类进入到今天的屏幕时代,可以追溯很多很多东西,一直追索到远古时代。但美国人道格拉斯.恩格尔巴特Doug.Engelbart(1925-2013)在1963年发明的鼠标,一般都看作是GUI的源头。正是这个鼠标所带来的屏幕游标,对于计算机的命令行控制的观念带来了巨大的冲击。图像观念,由此而进入到计算机研究者群体的视野。
恩格尔巴特发明的鼠标(来自百度)

十年之后的1973年,当时的施乐公司(Xereo)给它们的计算机Alto,配备了集合许多计算机元素的图形界面操作系统,使用的就是3键鼠标。一些基本的图形界面概念,由此而在计算机中出现了。首先当然是鼠标,还有矩形窗口,滚动条,桌面,所见即所得等等新概念。窗口概念的出现似乎最为重要,自然语言的窗口概念,用在计算机之中,似乎完全超越了这个词本身的含义。人类似乎因为这个概念的出现,而展现了一个新的世界,一个与实在世界相通相连,却又可以说完全不同的虚拟世界。我们是从屏幕的窗口,进入到各式各样虚拟世界的。一个真假更难辨别,信息超级爆炸,鬼蜮魍魉满布的虚拟世界。
这个窗口一打开,世界真的变了一个样。几乎所有的智慧人类,除了这个环绕自身的实在世界之外,我们几乎有无限的窗口,来给我们展示无限的虚拟世界。这个宏大话题,暂且就到此为止吧,我们还是聚焦到那个GUI,看看这施乐的图形界面系统的出现,随之带来些何方神奇。
施乐的用户界面

![在这里插入图片描述](https://img-blog.csdnimg.cn/fa17b106862b43bdbe8e72f58103be09.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd2VpeGluXzQxNjcwMjU1,size_16,color_FFFFFF,t_70,g_se,x_16#pic_center
又过了几年,1976年,正是我们文革的尾期,我们依然在无休止地进行斗斗斗的时候,苹果的创始人乔布斯参观了施乐的计算机工厂。宛如触电似的那种激荡,让乔布斯不胜吁叹,用他自己的话,他简直就是亮瞎了眼,乔布斯说:
他们给我看了三样东西,但我被第一件东西亮瞎了,以至于我甚至没有看到另外两个。他们向我展示的东西之一是面向对象编程。他们给我看了,但是我没有get到。他们给看的另一个实际上是一个互联的计算机系统。有超过一百个Alto计算机在使用电子邮件等等,我也没有get到。那个亮瞎我的第一件东西就是图形用户界面(GUI),我认为这是我这辈子见到的最好的东西(转摘自https://www.jianshu.com/p/9133f5a567dc《简书》路漫漫博文)。

这个参观肯定震动了乔布斯,又过了几年,1983年,乔布斯的苹果公司推出了appleLisa个人计算机,这应该是全球第一款搭建图形用户界面的个人计算机。
乔布斯看到的第一款图形界面计算机

于是,GUI的进展加快了脚步,继苹果之后,比尔盖茨的微软紧跟上来。1986年首款用于Unix的窗口系统X.Window.System发布出来。
1986年的window

1988年微软与IBM合作创建了窗口系统OS/2,1990年微软发行win3.0.。九十年代开始使用win操作系统的人,都会对这个win3.0有感觉。那时候国内开始出现互联网,当时win3.0配备的浏览器,我记得有Netscape Navigator,中文名为网景,但那时的上网,费用高不说,基本上没有什么东西。微软的win3.0,
Win3.0

一直升到win3.11,图形界面又产生一次飞跃式的进步。
Win3.11版

这个进步就是1995年出现的window95,窗口以全名展现出来。我们几乎全都通过窗口,来领略那个与实在世界同在的虚拟世界,全球化似乎在这个窗口的引领之下,真的让这个地球成为了一个村落。
Win95

2000年后的win

图形用户界面GUI由此而成型,从此,计算机屏幕给我们呈现的就是窗口。我们的自然语言,把我们人体的眼睛称作心灵的窗口。这大概至少是两层意思,一层意思,主体通过眼睛来观察外部世界,再传递给主体的心灵来消化这些观察。另一层意思,客体则可以通过我们的眼睛来测度我们的心灵。这个语词用到计算机,则显然有它自身的专业意义。窗口在这里成为一个专业计算机词汇,通俗一点地说,计算机的屏幕表层就是一个窗口,窗口之内则是一个巨大的容器或者虚拟空间,这个空间所容纳的东西都是信息。而为了获得信息和创制信息,我们需要在窗口设置导引的界面。就像我们远程旅行需要地图一样。于是在窗口之中,需要设置标签、按钮、文本框、工具栏、菜单、图标、控件、框架等等。还有更多派生出的计算机词汇,难以列尽。由这些导引,我们才方便去实现程序的开发和应用,我们才能看到,这个虚拟窗口之后的虚拟世界。
这真是回应了那句格言:人类的生活来自于人类的发明。GUI的发明和成型,人类的周边从此就不仅有环绕自身的实在世界,也有在那个小小窗口后面无穷无尽的虚拟世界。
Gui概念关系图

三、计算机语言与GUI的对接
完全无知python的时候,没有想到python的编程和GUI链接起来运用。等到对于基本概念有了大致的理解,开始做些简单编程的时候,GUI出现了。原来,python语言是把GUI打包进它的语言包中。上世纪90年代成型的GUI,也是上世纪创建的python语言,就这样合成了一体。所谓知识与信息的共享,成型的GUI系统应该是一个例子。自然,现在的python语言,也是知识与信息共享的又一个例子。
这两个东西的对接,也是一件有趣的结合。我们用python组织一段字符,计算机的屏幕就出现一个对应的图形。而在GUI中,伴随窗口而产生的系列图形,都是我们的自然语言中通俗易懂的那些语汇。如以上章节提到的:窗口,标签、按钮、文本框、工具栏、菜单、图标、控件、框架等等。还有图片、视频和动画等等,都有和python的对接。以下仅以我模拟自编的一小段编程作为例子,来说明python字符与GUI图形界面的对接。
自编ch5-7

#ch5-7图形界面
from tkinter import *
def printinfo():print('Account:%s\nPassword: %s' % (accountE.get(),pwdE.get()))accountE.delete(0,END)pwdE.delete(0,END)root = Tk()
root.title('ch5-7')msg = 'welcome to our south china normal university'
fourGIF = PhotoImage(file='four.gif')
logo = Label(root,image=fourGIF,text=msg,compound=BOTTOM)
account = Label(root,text='Account')
account.grid(row=1)
pwdL = Label(root,text='Password')
pwdL.grid(row=2)logo.grid(row=0,column=2,pady=10,padx=10)
accountE = Entry(root)
pwdE = Entry(root,show='*')
accountE.insert(0,'WenQi')
pwdE.insert(0,'pwd')
accountE.grid(row=1,column=1)
pwdE.grid(row=2,column=1,pady=10)loginbtn = Button(root,text='Login',command=printinfo)
loginbtn.grid(row=3,column=0,sticky=W,pady=5)
quitbtn = Button(root,text='Quit',command=root.quit)
quitbtn.grid(row=3,column=1,sticky=W,pady=5)root.mainloop()

以上文件执行后的GUI图片

这个世界,因为总有那些搅屎棍的折腾而动荡不安,但是,这个世界也因为科技的进步与共享而不断给我们以机会和幸运。唯淡泊而致宁静,旷达以成修远也。
本文的撰写,特别多地借用了《简书》网页博客作者路漫漫的图片和行文思路,在此致以谢意。
来自简书的作者题头截图

GUI的演化和python编程——Python学习笔记之二十二相关推荐

  1. 熊猫的python小课_朋友圈里那个可爱的小熊猫Python编程的学习笔记,学编程,不难!...

    Print( ) 详细请见公众号文章,里面有让人印象深刻,无法忘记的灵魂画手的图画解释.朋友圈里那个可爱的小熊猫Python编程的学习笔记,学编程,不难!​mp.weixin.qq.com 人类有人类 ...

  2. OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五

    OpenCV学习笔记(五十一)--imge stitching图像拼接stitching stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitch ...

  3. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  4. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  5. Slicer学习笔记(六十二)slicer下导出模块接口

    Slicer学习笔记(六十二)slicer下导出模块接口 1. 参考文件实现 1. 参考文件实现 通过配置config_file为每一个生成类添加 Export,并为每个Module生成 Export ...

  6. Slicer学习笔记(四十二)slicer c++源码编译

    Slicer学习笔记(四十二)slicer c++源码编译 1.cmake生成项目 2.编译失败的原因汇总 2.1.下载代码失败 之前在windows下编译slicer,没有做笔记. 后面再次编译还会 ...

  7. 【OS学习笔记】三十二 保护模式九:分页机制对应的汇编代码之---内核代码

    本片文章是以下两篇文章: [OS学习笔记]三十 保护模式九:段页式内存管理机制概述 [OS学习笔记]三十一 保护模式九:页目录.页表和页三者的关系详解 对应的内核汇编代码. ;代码清单16-1;文件名 ...

  8. OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年

    首先还是要感谢箫鸣朋友在我<OpenCV学习笔记(四十)--再谈OpenCV数据结构Mat详解>的留言,告诉我M.at<float>(3, 3)在Debug模式下运行缓慢,推荐 ...

  9. 自学python入门-自学Python编程基础学习笔记 PDF 完整超清版

    一. Why. 为什么学习Python.Python这门语言​用处比较广泛: 1.写测试脚本,因为PY是解释性语言,天生就有作为测试脚本语言的优势,语法简单,通俗易懂,可移植性好(底层使用C语言来编写 ...

  10. Python编程入门学习笔记(十)

    python学习笔记(十) <h1 style="text-align:center">泰坦尼克数据处理与分析 </h1>![](http://www.al ...

最新文章

  1. NBT:Rob Knight团队发表微生物组数据降维新方法
  2. vb.net 功能f8键事件_Excel中F1~F12所有功能键作用,你知道吗?
  3. 中兴通讯首席科学家谈5G现状
  4. [读书笔记]TCP/IP详解V1读书笔记-3
  5. seata 如何开启tcc事物_微服务分布式事务4种解决方案实战
  6. Java Web整合开发(13) -- XML
  7. MongoDB(二)CRUD 指令简单汇总
  8. mybatis使用和分析
  9. 190601每日一句
  10. jdbc学习笔记3,blob类型数据的操作,preparedstatement的批量操作,数据库的事务,以及事务的特性,隔离权限的修改
  11. 挑战程序设计竞赛2 算法与数据结构 笔记
  12. 如何搭建运营级的网络直播平台
  13. 使用飞桨一步步实现多语言OCR文字识别软件
  14. 基本了解云计算是什么东东了
  15. java 图片加多处水印_Java在Word中添加多行图片水印
  16. 模板匹配及其源代码---Edge Based Template Matching
  17. VC中.pch是什么文件,没有.pch文件怎么办
  18. Word标题跟随正文样式缩进的解决办法
  19. 三、补充几个常用且开源的通信协议测试工具
  20. 金蝶EAS开发 第一弹:了解开发工具与基本使用(上)

热门文章

  1. 前端--video大视频播放(m3u8)
  2. CentOS install PHP
  3. 处理器的排名_waste waltz家用垃圾处理器排名图片
  4. word里面Ctrl+V不能粘贴解决方法
  5. 细说Linux的就业方向
  6. 可扩展面向对象的canvas画图程序
  7. 【汇正财经】什么是市盈率?
  8. Windows10 官方原版镜像下载途径 Label:win10解决方案
  9. 做XRD有什么用途?
  10. 来把狠的——传一个肖邦的《Black Key Exercise(黑键练习曲)》