Python支持的工具包非常多。但没有一个被觉得标准的工具包。用户选择的自由度大些.本章主要介绍最成熟的跨平台工具包wxPython.官方文档: http://wxpython.org/

------

丰富的平台:

Tkinter实际上类似于标准,由于它被用于大多数正式的Python GUI程序。并且它是Windows二进制公布版的一部分。

可是在UNIX上要自己编译安装。

还有一个越来越受欢迎的工具是wxPython。

这是个成熟并且特性丰富的包,也是Python之父,Guido van Rossum的最爱

------

下载安装wxPython

http://wxpython.org/download.php

NOTE:

1. 注意选择跟自己PC的二进制版本号相应的Python版本号

2. 下载wxPython后,强烈建议下载演示版本号(demo),演示样例程序很具体

------

创建演示样例GUI程序

最简单的演示样例程序例如以下:

>>> import wx      #导入模块       

>>> app = wx.App() #初始化主要的引用程序类

>>> app.MainLoop() #wx中的包方法大写开头,与Python习惯相反

窗体和组件

窗体也称为框架,它是wx.Frame类的实例。wx框架中的部件都是由它们的父部件作为构造函数的第一个參数创建的。假设正在创建的一个单独的窗体,就不须要考虑父部件,使用None就可以。

并且在调用app.MainLoop前须要调用窗体的

Show方法--否则它会一直隐藏.

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

  • 程序清单2: 在框架上加入button

#在框架上加入button也非常easy,仅仅要使用win作为父參数实例化wx.Button就可以.

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

  • 程序清单3: 使用keyword參数添加标签和标题
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()

看样子丢了一个button,实际上隐藏了。假设要显示出来,里面的post,size就得用上.

  • 程序清单4: 设置button位置
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()

------

更智能的布局

在wx内进行布局的最简单方法是使用尺寸器(sizer),最easy使用的工具是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()

布局已经好了,但点击button后什么反应也没有

------

完毕了的程序

剩下的工作,须要两个处理函数: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()

------

其它工具包

能够看以下最简单样例,仅仅有一个窗体,带有Hello标签的button,点击button时。它会打印文本"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()

------

使用Tkinter

Python自带的,以下是使用Tkinter实现的GUI程序

from Tkinter import *

def hello():
print ('Hello,World!') win = Tk()
win.title('Hello,Tkinter!')
win.geometry('200x100') btn = Button(win,text='Hello',command=hello)
btn.pack(expand=YES,fill=BOTH) mainloop()

------

其它还能够使用Jython和Swing

Jython: Python的Java实现,类似于wxPython和Tkinter这种包就不能用了。唯一可用的GUI工具包是Java标准库包

中的AWT和Swing。

<<Python基础教程>>学习笔记 | 第12章 | 图形用户界面的更多相关文章

  1. <<Python基础教程>>学习笔记 | 第10章 | 充电时刻

    第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简 ...

  2. <<Python基础教程>>学习笔记 | 第11章 | 文件和素材

    打开文件 open(name[mode[,buffing]) name: 是强制选项,模式和缓冲是可选的 #假设文件不在.会报以下错误: >>> f = open(r'D:\text ...

  3. <<Python基础教程>>学习笔记 | 第04章 | 字典

    第04章:字典 当索引不好用时 Python唯一的内建的映射类型,无序,但都存储在一个特定的键中.键能够使字符.数字.或者是元祖. ------ 字典使用: 表征游戏棋盘的状态,每一个键都是由坐标值组 ...

  4. <<Python基础课程>>学习笔记 | 文章13章 | 数据库支持

    备注:本章介绍了比较简单,只是比较使用样品,主要假设是把握连接,利用数据库.和SQLite做演示样本 ------ Python数据库API 为了解决Python中各种数据库模块间的兼容问题,如今已经 ...

  5. CSS3秘笈第三版涵盖HTML5学习笔记9~12章

    第9章,装饰网站导航 限制访问,处于隐私方面考虑,浏览器已经开始限制可以对伪类:visited应用哪些CSS属性了.其中包括对已访问过的链接定义color.background-color.borde ...

  6. Python基础教程(第3版) 笔记(三)

    1.9.1让脚本像普通程序一样在UNIX中运行脚本,只需将下面的代码作为脚本的第一行, 就可在UNIX中轻松运行脚本: #!/usr/bin/env python 要像普通程序一样运行脚本,还必须将其 ...

  7. Python基础教程(第3版) 笔记(二)

    1.8模块Python提供了完成(某人的年 龄为32.9,并想将这个值向下圆整为32,因为他还没有满33岁)这种任务的函 数floor.导入模块,可以使用特殊命令import.函数floor包含在模块 ...

  8. Python基础教程(第3版) 笔记(一)

    1.1 数和表达式: 除法运算的结果为小数,即浮点数 >>>1/2 0.5 除法运算为整数,使用双斜杠 >>>1//2 0 >>>5.0//2.4 ...

  9. Python基础教程思维导图笔记

    说明:直接查看图片可能不太清楚,用浏览器打开后,按住 Ctrl ,网上滚动鼠标放大浏览器页面,可以看清楚图片

随机推荐

  1. 【codeforces 738E】Subordinates

    [题目链接]:http://codeforces.com/problemset/problem/738/E [题意] 给你一个类似树形的关系; 然后告诉你某个人头顶上有多少个上司numi; 只有fat ...

  2. 【codeforces 810C】Do you want a date?

    [题目链接]:http://codeforces.com/contest/810/problem/C [题意] 给你一个集合,它包含a[1],a[2]..a[n]这n个整数 让你求出这个集合的所有子集 ...

  3. soapUI 5.1.2 下载以及破解

    转:https://blog.csdn.net/weiqing723/article/details/78865734

  4. 数据结构与算法系列----最小生成树(Prim算法&Kruskal算法)

     一:Prim算法       1.概览 普里姆算法(Prim算法).图论中的一种算法.可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中.不但包含了连通图里的全部顶点(英语:Ve ...

  5. Android 中文字体的设置方法和使用技巧

    Android TextView字体颜色等样式具体解释连接:http://blog.csdn.net/pcaxb/article/details/47341249 1.使用字体库(自己定义字体的使用) ...

  6. Qt Quick Controls 与 Qt Quick Controls 2的区别(详细对照)

    Qt Quick Controls 原本是为支持桌面平台而开发的,后来又加入了移动平台和嵌入式平台的支持.它们应用非常广泛,因为它们提供了足够灵活的样式系统,以允许开发具有平台相关或者无关风格的应用程 ...

  7. 如何编译dotnet core

    1.git clone源码 2.init-tools.cmd 3. Error: DIA SDK is missing at "C:\Program Files (x86)\Microsof ...

  8. Java中异常处理之try和catch代码块的使用

    转自:https://www.jb51.net/article/72901.htm Java try和catch的使用 尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自 ...

  9. MongoDB 系列(二) C# 内嵌元素操作 聚合使用

    "_id" : "639d8a50-7864-458f-9a7d-b72647a3d226","ParentGuid" : "00 ...

  10. OEM12C(12.1.0.5)安装插件监控mysql(linux)

    目录结构: 文章参考论坛:https://blog.csdn.net/u010719917/article/details/78128200 环境说明: oms:12.1.0.5  os:centos ...