GUI

python提供了多个图形开发界面的库,几个常用Python GUI库如下:

Tkinter: Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.,Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能键全的 GUI 用户界面。

Jython:Jython程序可以和Java无缝集成。除了一些标准模块,Jython使用Java的模块。Jython几乎拥有标准的Python中不依赖于C语言的全部模块。比如,Jython的用户界面将使用Swing,AWT或者SWT。Jython可以被动态或静态地编译成Java字节码。

安装:

本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口。这里介绍wxPython :

根据自己的操作系统下载相应版本。

安装过程非常简单,以win7系统为例,点击下载的exe 文件,保持安装目录与本机的python目录一致就OK了。

创建并显示一个框架

importwx

app=wx.App()

win=wx.Frame(None)

win.Show()

app.MainLoop()

运行:

我们来创建一个文本编辑器,功能要求如下:

* 它可以打开给定文件名的文本文件;

* 它可以编辑文件文件

* 它可以保存文本文件

* 它可以正常退出程序

importwx

app=wx.App()

win=wx.Frame(None,title='Simple Editor',size=(410,335))

win.Show()

loadButton=wx.Button(win,label='Open',pos=(225,5),size=(80,25))

saveButton=wx.Button(win,label='Save',pos=(315,5),size=(80,25))

filename=wx.TextCtrl(win,pos=(5,5),size=(210,25))

contents=wx.TextCtrl(win,pos=(5,35),size=(390,260),style=wx.TE_MULTILINE|wx.HSCROLL)

app.MainLoop()

结果:

更智能的布局

使用尺寸器

importwx

app=wx.App()

win=wx.Frame(None,title='Simple Editor',size=(410,335))

bkg=wx.Panel(win)

loadButton=wx.Button(bkg,label='Open')

saveButton=wx.Button(bkg,label='Save')

filename=wx.TextCtrl(bkg)

contents=wx.TextCtrl(bkg,style=wx.TE_MULTILINE|wx.HSCROLL)

hbox=wx.BoxSizer()

hbox.Add(filename,proportion=1,flag=wx.EXPAND)

hbox.Add(loadButton,proportion=0,flag=wx.LEFT,border=5)

hbox.Add(saveButton,proportion=0,flag=wx.LEFT,border=5)

vbox=wx.BoxSizer(wx.VERTICAL)

vbox.Add(hbox,proportion=0,flag=wx.EXPAND | wx.ALL,border=5)

vbox.Add(contents,proportion=1,flag=wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT,border=5)

bkg.SetSizer(vbox)

win.Show()

app.MainLoop()

运行结果:

运行这段代码,窗口会和上面的相同,但是使用了相对坐标而不是绝对坐标。

wx.BoxSizer的构造函数带有一个决定它是水平还是垂直的参数,默认为水平。

add方法有几个参数,proportion参数根据在窗口改变大小时所分配的空间设置比例。flag参数类似于构造函数中的style参数,可以使用按位或运算符连接构造符号常量。

事件处理

上面的界面做好了,但是我们点击按钮不起任何的作用。

在GUI术语中,用户执行的动作(比如 点击按钮)叫做事件。我们需要让程序注意这些事件并且作出反应。

假设写了一个负责打开文件的函数,并将其命令为load ,然后就可以像下面这样将函数作为loadButton的事件处理函数:

loadButton.Bind(wx.EVT_BUTTON,load)

完成了的程序

让我们来完成剩下的工作,现在需要的就是两个事件处理函数:load(打开)和save(保存)。当事件被调用时,它会收到一个事件对象作为它唯一的参数,其中包括发生了什么事情的信息,但是在这里可以忽略这方法的事情,因为程序只关心点击时发生的事情。

defload(event):

file=open(filename.GetValue())

contents.SetValue(file.read())

file.close()

上节刚刚学过文件的打开/读取,文件名使用filename对象GetValue方法获取。为了将文本引入文本区,只要使用contents.SetValue即可。

save函数和load类似,除了它需要写入("w’),以及用于文件处理部分的write方法,GetValue用于从文本区获得信息。

defsave(event):

file=open(filename.GetValue(),'w')

file.write(contents.GetValue())

file.close()

最终的GUI程序

importwxdefload(event):

file=open(filename.GetValue())

contents.SetValue(file.read())

file.close()defsave(event):

file=open(filename.GetValue(),'w')

file.write(contents.GetValue())

file.close()

app=wx.App()

win=wx.Frame(None,title='Simple Editor',size=(410,335))

bkg=wx.Panel(win)

loadButton=wx.Button(bkg,label='Open')

loadButton.Bind(wx.EVT_BUTTON,load)

saveButton=wx.Button(bkg,label='Save')

saveButton.Bind(wx.EVT_BUTTON,save)

filename=wx.TextCtrl(bkg)

contents=wx.TextCtrl(bkg,style=wx.TE_MULTILINE|wx.HSCROLL)

hbox=wx.BoxSizer()

hbox.Add(filename,proportion=1,flag=wx.EXPAND)

hbox.Add(loadButton,proportion=0,flag=wx.LEFT,border=5)

hbox.Add(saveButton,proportion=0,flag=wx.LEFT,border=5)

vbox=wx.BoxSizer(wx.VERTICAL)

vbox.Add(hbox,proportion=0,flag=wx.EXPAND | wx.ALL,border=5)

vbox.Add(contents,proportion=1,flag=wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT,border=5)

bkg.SetSizer(vbox)

win.Show()

app.MainLoop()

运行结果:

使用步骤:

下面玩转这个小程序步骤:

1、文本框输入hello8.txt

2、文本区输入Hello.world!

3、点击保存(不会有保存成功的提示,但它已经成功了)

4、关闭编辑器,重新运行打开。

5、文件框输入hello8.txt ,点击“打开”按钮,上次编辑的内容(Hello.world!)在文本区出现了。

窗口含有一个"hello’标签按钮,点击hello,会在文本框中显示'Hello,world!'

importwxdefhello(event):print 'Hello,world!'app=wx.App()

win=wx.Frame(None,title='Hello,wxPython!',size=(200,100))

button=wx.Button(win,label='Hello')

button.Bind(wx.EVT_BUTTON,hello)

win.Show()

app.MainLoop()

python打开界面是什么样的-python学习笔记(图形用户界面)相关推荐

  1. Python学习笔记——图形用户界面(2)

    Checkbutton控件 Checkbutton控件用来创建复选框.下列是Checkbutton控件的属性. (1)onvalue,offvalue:设置Checkbutton控件的variable ...

  2. 《python(廖雪峰课程)》学习笔记

    <python(廖雪峰课程)>学习笔记(个人检索) 1. 第一个python程序 input & output print输出字符串可以用""or'' prin ...

  3. python web开发入门_python大佬整理的python web开发从入门到精通学习笔记

    原标题:python大佬整理的python web开发从入门到精通学习笔记 Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通 ...

  4. 【UI界面设计】PS基础学习笔记

    [UI界面设计]PS基础学习笔记 一.概述 1.行业规范: 2.介绍 二.PS入门 1.安装 2.基本介绍 3.新建项目 4.PS的基本使用流程 5.项目保存 6.抠图 7.修图 8.修人像图 9.如 ...

  5. 如何远程看到Linux系统界面,linux系统之间ssh远程连接图形用户界面

    1.首次使用的环境配置 要使用ssh远程连接,首先要安装服务端: sudo apt-get install openssh-server 其次安装客户端: sudo apt-get install o ...

  6. python打开界面-python学习笔记(图形用户界面)

    GUI python提供了多个图形开发界面的库,几个常用Python GUI库如下: Tkinter: Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的 ...

  7. 《Python编程从入门到实践》学习笔记6:字典

    字典是Python中的唯一的映射类型,也是一个容器类型.Python的字典能够存储任意个数的Python对象,也包括其他容器类型.创建一个基本的字典,需要包括字典名称,以及用花括号扩起来的键值对,如下 ...

  8. 软件测试-柠檬班python全栈自动化50期测试学习笔记分享

    数组(1174536086)←v是有序的元素序列.用于差异数组的各个元素的数字编号称为下标.若将有限个类型相同的变量的集结命名,那么这个名称为数组名.数组是一个固定长度的存储相同数据类型的数据结构,数 ...

  9. python打开中文文件名_解决python打开中文文件名乱码的问题

    解决python打开中文文件名乱码的问题 发布时间:2020-07-27 11:20:22 来源:亿速云 阅读:162 作者:清晨 小编给大家分享一下解决python打开中文文件名乱码的问题,相信大部 ...

最新文章

  1. 头条一面:Spring IOC容器中只存放单例Bean吗?
  2. BGP community
  3. java int数列转字符串,鍥剧墖杞瓧绗︿覆
  4. Hadoop学习(二)——MapReduce\Yarn架构
  5. 【yolo】yolov3的pytorch版本保存自定义数据集训练好的权重,并载入自己的模型
  6. 28句话让你的人际关系更上一层楼
  7. php event loop,理解javascript中的事件循环(Event Loop)
  8. java禁止修改map_Java中实现不可变Map
  9. codeforce No to Palindromes!(枚举)
  10. jackson 读取多文件_Spring Boot系列之读取配置
  11. Android笔记 显式意图demo
  12. python 模块
  13. 创意美食海报,悬浮跳动食材,视觉刺激大脑(PSD分层模板)
  14. 如何在终端窗口中在Linux中创建文件?
  15. [readable]轻松学,浅析依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI)
  16. Keras的基本使用(1)--创建,编译,训练模型
  17. 团队作业7——第二次项目冲刺(Beta版本)
  18. 网站建设以后如何处理死链接页面
  19. 亲戚关系关系算法java程序_并查集1——查找亲戚关系
  20. 导数与微分常用公式(基础)

热门文章

  1. vue2路由移除#号(Apache)
  2. exp ORA-01455: converting column overflows integer datatype
  3. Golang代码实现HTTPs(HTTPS证书生成和部署)
  4. Spring Boot 2 (四):使用 Docker 部署 Spring Boot
  5. Django中的auth模块
  6. spring aop切面中获取代理bean的名字以及bean
  7. 与班尼特·胡迪一起找简单规律(HZOJ-2262)
  8. 怎么删除Elasticsearch里的index内容
  9. Sliverlight之 画刷
  10. 圆角有边框背景色时,背景色溢出问题