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. UVa 11552 Fewest Flops (DP)

    题意:给一个字符串,把它分为k块,每一块里面的字母可以任意的排序.最终字符串, 连续的一样的字母算作一个chunk,问总chunks最少是多少? 析:dp[i][j] 表示第 i 个块,第 j 位在末 ...

  2. HDU - 5451 Best Solver(循环节+矩阵快速幂)

    Best Solver The so-called best problem solver can easily solve this problem, with his/her childhood ...

  3. AutoHotkey常用配置

    ; 开发常用 ^e:: run D:\soft\java\MyEclipse for Spring 2014\myeclipseforspring.exe return ^d:: run D:\sof ...

  4. C++开源库(一) ----libConfig详解

    博主天生患有蛋疼疾病,写博不易,转载注明出处http://www.cnblogs.com/liboBlog/,谢谢! 在写程序的时候必不可少的一个部分就是conf文件的解析,但是如果自己解析的话会比较 ...

  5. 数据可视化系列--svg入门基础(一)

    一.前言 1.SVG(Scalable Vector Graphics)可伸缩矢量图形 特点: (1)使用xml格式来定义图形: (2)用来定义web上的使用的矢量图: (3)改变图像尺寸,图片质量不 ...

  6. 当我们聊kubernetes operator时,我们在聊些什么

    不聊什么 在开始聊operator前,先说说这篇文章里我们不聊什么.我们这里不聊operator的具体实现,不聊operator的由来历史,不聊operator的hello world.如果想了解这些 ...

  7. JavaScript 原型的实际应用之实现一个 jQuery

    我们平时使用jQuery大概是这样: let $p = $('p'); $p.css('fontSize', '40px'); 我们生成jQuery实例对象后,就可以使用原型上的css(), html ...

  8. codevs1553 互斥的数

    1553 互斥的数    

  9. IT兄弟连 JavaWeb教程 监听器1

    1  基本概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序 ...

  10. Node.js的安装与使用-Windows系统

    首先到官网下载node.js http://nodejs.cn 下载完成后一直下一步Next即可安装完成,路径可以自己设置 然后配置环境变量,将node安装的目录配置到Path中 例如: cmd打开命 ...