python基础教程总结11——图形用户界面GUI

1. 丰富的平台

 工具包                                描述

 Tkinter                使用Tk平台。很容易得到。半标准。

 wxpython               基于wxWindows。跨平台越来越流行。

PythonWin              只能在Windows上使用。使用了本机的Windows GUI功能。

JavaSwing              只能用于Jython。使用本机的Java GUI。

  PyGTK                  使用GTK平台,在linux上很流行。

  PyQt                   使用Qt平台,跨平台。                            

2.wxpython 创建实例GUI

实例要求:

2.1 简单的示例程序:

>>> import wx      #导入模块
>>> app = wx.App() #初始化基本的引用程序类
>>> app.MainLoop() #wx中的包方法大写开头,与Python习惯相反

2.2 窗口和组件

  窗口也称为框架(Frame),它是wx.Frame类的实例。wx框架中的部件都是由它们的父部件作为构造函数的第一个参数创建的。如果正在创建的一个单独的窗口,就不需要考虑父部件,使用None即可。而且在调用app.MainLoop前需要调用窗口的Show方法--否则它会一直隐藏.

  • 程序清单1:
  • import wx
    app = wx.App()
    win = wx.Frame(None)
    win.Show()
    app.MainLoop()

2.3 标签,标题和位置

  • 程序清单2: 在框架上添加按钮
#在框架上添加按钮也很简单,只要使用win作为父参数实例化wx.Button即可.
import wx
app = wx.App()
win = wx.Frame(None)
btn = wx.Button(win)
win.Show()
app.MainLoop()

  • 程序清单3: 使用关键字参数增加标签和标题
import wx
app = wx.App()
win = wx.Frame(None,title="Simple Editor")
loadButton = wx.Button(win,label=‘Open‘)
saveButton = wx.Button(win,label=‘Save‘)
win.Show()
app.MainLoop()

  看样子丢了一个按钮,实际上隐藏了,如果要显示出来,里面的post,size就得用上.

  • 程序清单4: 设置按钮位置
import wx

app = wx.App()
win = wx.Frame(None,title="Simple Editor",size=(410,335))
win.Show()
#位置坐标,x与y的值
loadButton = wx.Button(win,label=‘Open‘,pos=(225,5),size=(80,25))
saveButton = wx.Button(win,label=‘Save‘,pos=(315,5),size=(80,25))
#文本框(wx.TextCtrl的对象),默认可编辑,无滚动条
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)
#style参数,可以使用按位或OR联合wx模块中具有特殊名字的风格来指定
#wx.TE_MULTILINE 垂直滚动条
#wx.HSCROLL      水平滚动条
app.MainLoop()

2.4 更智能的布局

  在wx内进行布局的最简单方法是使用尺寸器(sizer),最容易使用的工具是wx.BoxSizer。尺寸器会管理组件的尺寸。只要将部件添加到尺寸器上,再加上一些布局参数,然后让尺寸器自己去管理父组件的尺寸。在上面的例子中,需要增加背景组件(wx.Panel),创建一些嵌套的wx.BoxSizer,然后使用面板的SetSizer方法设定它的尺寸器。

  • 程序清单5: 使用尺寸器
#代码的运行效果和上例相同,只不过用相对坐标而不是绝对坐标
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)
#wx.BoxSizer两个参数wx.HORIZONTAL(垂直),wx.VERTICAL(水平,默认)
#Add方法有几个参数,proportion参数根据在窗口改变大小时所分配空间设置比例
#例如:水平的BoxSizer中,filename组件在改变大小时获取全部的额外空间
#如果这3个部件都把proprotion设置为1,那么都会获取相等的空间
#可以讲proportion设定为任何数
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)

#flag参数类似于style参数,可以使用|或者OR连接构造符号常量对其进行构造
#wx.EXPAND标记确保组件会扩展到所有分配的空间中。而wx.LEFT,wx.RIGHT,wx.TOP,
#wx.BOTTOM和wx.ALL标记决定边框参数应用于哪个边,用于设置边缘宽度
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()

  

2.5 最终程序

  GUI术语中,用户执行的动作(比如点击按钮)叫做事件(event),需要让程序注意事件并作出反应。可以将函数绑定到所涉及的事件可能发生的组件上达到效果,当事件发生时,函数会被调用

  剩下的工作,需要两个处理函数:load和save。当事件处理函数被调用时,事件对象event是唯一的参数

  #文件名使用filename对象的GetValue方法获取

  #为了将文本引入文本区,只要使用contents.SetValue即可.

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

  #save函数几乎和load一样,除了它有个‘w‘属性以及write方法.

  #GetValue用于从文本区获得信息

def save(event):
    file = open(filename.GetValue(),‘w‘)
    file.write(contents.GetValue())
    file.close()
  • 程序清单6: 最终的程序
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()

  

时间: 2024-10-12 12:23:54

python基础教程总结11——图形用户界面GUI的相关文章

Python基础教程 第11章: 文件和流 学习笔记

本文部分内容转载于: http://www.runoob.com/python/python-files-io.html http://docs.pythontab.com/python/python2.7/inputoutput.html#tut-files 打开文件: 你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的辅助方法才可以调用它进行读写.语法: file object = open(file_name [, access_mode][, buff

python基础教程_学习笔记23:图形用户界面

图形用户界面 丰富的平台 在编写Python GUI程序前,需要决定使用哪个GUI平台. 简单来说,平台是图形组件的一个特定集合,可以通过叫做GUI工具包的给定Python模块进行访问. 工具包 描述 Tkinter 使用Tk平台.很容易得到.半标准. wxpython 基于wxWindows.跨平台越来越流行. PythonWin 只能在Windows上使用.使用了本机的Windows GUI功能. JavaSwing 只能用于Jython.使用本机的Java GUI. PyGTK 使用GTK

python基础教程_学习笔记11:魔法方法、属性和迭代器

魔法方法.属性和迭代器 在python中,有的名称会在前面和后面各加上两个下划线,这种写法很特别.它表示名字有特殊含义,所以绝不要在自己的程序中使用这种名字.在python中,由这些名字组成的集合所包含的方法叫做魔法(或称特殊)方法.如果对象实现了这些方法中的某一个,那么这个方法会在特殊的情况下被python调用,而几乎没有直接调用它们的必要. 准备工作 为了确保类是新型的,应该把赋值语句__metaclass__=type放在你的模块的最开始,或者(直接或间接)子类化内建类(实际上是类型)ob

《Python基础教程(第3版)》PDF高清版

Python基础教程(第3版) 链接: https://pan.baidu.com/s/1_sXv7pUXGJuG5Nd75_iDHA 提取码: 9b7q ? 内容简介  · · · · · · 本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基本概念,包括列表.元组.字符串.字典以及各种语句:然后循序渐进地介绍了一些相对高级的主题,包括抽象.异常.魔法方法.属性.迭代器:此后探讨了如何将Python与数据库.网络.C语言等工具结合使用,从

Python基础教程(第十章 自带电池)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5459376.html______ Created on Marlowes 现在已经介绍了Python语言的大部分基础知识.Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装中还包括一组模块,称为标准库(standard library).之前已经介绍了一些模块(例如math和cmath,其中包

Python基础教程(第十一章 文件和流)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5519591.html______ Created on Marlowes 到目前为止,本书介绍过的内容都是和解释器自带的数据结构打交道.我们的程序与外部的交互只是通过input.raw_input和print函数,与外部的交互很少.本章将更进一步,让程序能接触更多领域:文件和流.本章介绍的函数和对象可以让你在程序调用时存储数据,

python基础教程(第二版)

开始学习python,根据Python基础教程,把里面相关的基础章节写成对应的.py文件 下面是github上的链接 python基础第1章基础 python基础第2章序列和元组 python基础第3章使用字符串 python基础第4章字典 python基础第5章循环 python基础第6章函数和魔法参数 python基础第7章类 python基础第8章异常 python基础第9章魔法方法.属性和迭代器 python基础第11章文件 python基础第12章GUI(wxPython) pytho

Python基础教程(第九章 魔法方法、属性和迭代器)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5437223.html______ Created on Marlowes 在Python中,有的名称会在前面和后面都加上两个下划线,这种写法很特别.前面几章中已经出现过一些这样的名称(如__future__),这种拼写表示名字有特殊含义,所以绝不要在自己的程序中使用这样的名字.在Python中,由这些名字组成的集合所包含的方法称

Python基础教程(第六章 抽象)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5351415.html______ Created on Xu Hoo 本章将会介绍如何将语句组织成函数,这样,你可以告诉计算机如何做事,并且只需要告诉一次.有了函数以后,就不必反反复复像计算机传递同样的具体指令了.本章还会详细介绍参数(parameter)和作用域(scope)的概念,以及地柜的概念及其在程序中的用途. 6.1