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

  

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

  1. 《python基础教程(第二版)》学习笔记 文件和素材(第11章)

    <python基础教程(第二版)>学习笔记 文件和素材(第11章) 打开文件:open(filename[,mode[,buffering]]) mode是读写文件的模式f=open(r' ...

  2. Python基础教程(第2版 修订版) pdf

    Python基础教程(第2版 修订版) 目录 D11章快速改造:基础知识11.1安装Python11.1.1Windows11.1.2Linux和UNIX31.1.3苹果机(Macintosh)41. ...

  3. Python基础教程(第3版)PDF高清完整版免费下载|百度云盘

    百度云盘:Python基础教程(第3版)PDF高清完整版免费下载 提取码:gkiy 内容简介 本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基 ...

  4. python基础教程(第二版)

    开始学习python,根据Python基础教程,把里面相关的基础章节写成对应的.py文件 下面是github上的链接 python基础第1章基础 python基础第2章序列和元组 python基础第3 ...

  5. php 图形用户界面GUI 开发

    php 图形用户界面GUI 开发 一.下载指定系统扩展 1 2 http://pecl.php.net/package/ui http://pecl.php.net/package/ui/2.0.0/ ...

  6. Python基础教程学习笔记:第一章 基础知识

    Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...

  7. 《python基础教程(第二版)》学习笔记 基础部分(第1章)

    <python基础教程(第二版)>学习笔记 基础部分(第1章)python常用的IDE:Windows: IDLE(gui), Eclipse+PyDev; Python(command ...

  8. Python 基础教程之包和类的用法

    Python 基础教程之包和类的用法 建立一个文件夹filePackage 在filePackage 文件夹内创建 __init__.py 有了 __init__.py ,filePackage才算是 ...

  9. 学习参考《Python基础教程(第3版)》中文PDF+英文PDF+源代码

    python基础教程ed3: 基础知识 列表和元组 字符串 字典 流程控制 抽象(参数 作用域 递归) 异常 魔术方法/特性/迭代器 模块/标准库 文件 GUI DB 网络编程 测试 扩展python ...

随机推荐

  1. bootstrap下拉框式标签页

    <ul id="myTab" class="nav nav-tabs"> <li class="active"> & ...

  2. POJ1251 Jungle Roads Kruskal+scanf输入小技巧

    Jungle Roads The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign ai ...

  3. pure css做的手机页面

    <!doctype html> <html> <head> <meta http-equiv="Content-type" content ...

  4. 从头开始学Web开发—CSS_01

    CSS导入使用及引用的两种方法: 外部引用 外部引用的方式,我们直接可以通过link标签来引用我们写好的一个CSS文件: 在link 标签中,我们通过rel = "stylesheet&qu ...

  5. wampserver2.5局域网公网IP访问配置

    wampserver2.5集成环境的安装和使用就不多说了,网上有很多教材.安装好后找到apache的配置文件httpd.conf.默认位置是: swap安装目录\wamp\bin\apache\apa ...

  6. Luogu P3065 [USACO12DEC]第一!First!【字典树/拓扑排序】By cellur925

    题意:给你许多字符串,你可以改变字母序大小,问有哪些字符串可能成为字典序最小的字符串. 我们考虑把这些字符串都塞到\(trie\)树上.之后检索每一个字符串的时候,我们看和他同一层的地方是否有字符,如 ...

  7. Win7系统控制面板“设备和打印机”打不开解决办法

    Win7系统控制面板“设备和打印机”打不开解决办法, 打开时显示界面如下: 可能原因: 1.设备和打印机对应的驱动故障引起无法打开的问题 2.服务未开启 3.系统文件损坏 解决方法: 1.更新驱动.可 ...

  8. Linux上安装Docker,并成功部署NET Core 2.0

    概述 容器,顾名思义是用来存放并容纳东西的器皿: 而容器技术伴着Docker的兴起也渐渐的映入大家的眼帘,它是一个抽象的概念,同时也是默默存在世上多年的技术,不仅能使应用程序间完全的隔离,而且还能在共 ...

  9. HTML——传统布局的使用

    传统布局:使用table来做整体页面的布局 总结:这种方式来制作页面现在也不是很多了,感觉并不是很高效. 需要先用photoshop量出页面布局具体的尺寸位置,再将其划分为表格,对每个格子进行编辑. ...

  10. scrapy-redis 分布式哔哩哔哩网站用户爬虫

    scrapy里面,对每次请求的url都有一个指纹,这个指纹就是判断url是否被请求过的.默认是开启指纹即一个URL请求一次.如果我们使用分布式在多台机上面爬取数据,为了让爬虫的数据不重复,我们也需要一 ...