zoukankan      html  css  js  c++  java
  • python学习笔记(图形用户界面)

    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 :

    下载地址:http://www.wxpython.org/download.php

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

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

    创建并显示一个框架

    import wx
    app=wx.App()
    win=wx.Frame(None)
    win.Show()
    app.MainLoop()

    运行:

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

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

      * 它可以编辑文件文件

      * 它可以保存文本文件

      * 它可以正常退出程序

    import wx
    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()

    结果:

    更智能的布局

    使用尺寸器

    import wx
    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(保存)。当事件被调用时,它会收到一个事件对象作为它唯一的参数,其中包括发生了什么事情的信息,但是在这里可以忽略这方法的事情,因为程序只关心点击时发生的事情。

    def load(event):
        file=open(filename.GetValue())
        contents.SetValue(file.read())
        file.close()

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

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

    def save(event):
        file=open(filename.GetValue(),'w')
        file.write(contents.GetValue())
        file.close()

    最终的GUI程序

    import wx
    def load(event):
        file=open(filename.GetValue())
        contents.SetValue(file.read())
        file.close()
    
    def save(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!'

    import wx
    def hello(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()
  • 相关阅读:
    栈和队列的概念
    01-开始使用django(全、简)
    临时记录01
    centos删除乱码名称的文件
    《计算机网络》谢希仁(第7版) 第一章
    git提交到远程虚拟机
    安全篇:弱密码python检测工具
    正向代理、Nginx(反向代理、负载均衡、静态资源服务器)
    列表去重、去除满足一定条件的元素
    editplus的常用快捷键
  • 原文地址:https://www.cnblogs.com/whats/p/4742422.html
Copyright © 2011-2022 走看看