python基础教程_学习笔记23:图形用户界面
来源:互联网 发布:淘宝怎么搜短信轰炸机 编辑:程序博客网 时间:2024/04/29 12:45
图形用户界面
丰富的平台
在编写Python GUI程序前,需要决定使用哪个GUI平台。
简单来说,平台是图形组件的一个特定集合,可以通过叫做GUI工具包的给定Python模块进行访问。
工具包
描述
Tkinter
使用Tk平台。很容易得到。半标准。
wxpython
基于wxWindows。跨平台越来越流行。
PythonWin
只能在Windows上使用。使用了本机的Windows GUI功能。
JavaSwing
只能用于Jython。使用本机的Java GUI。
PyGTK
使用GTK平台,在linux上很流行。
PyQt
使用Qt平台,跨平台。
每个工具包都有利弊,但很大程度上取决于个人喜好。
以下以wxPython为例。
下载和安装wxPython
下载地址:
http://wxpython.org/download.php
注意:如果python是64位的,则必须选用64位的wxPython,否则即便是64位的操作系统也应该选用32位的wxPython。
建议下载wxPython的演示版本,并研究它。
创建示例GUI应用程序
开始
开始需要导入wx模块:
import wx
编写wxPython程序的方法很多,但不可避免的事情是创建应用程序对象。基本的应用程序类是ex.App,它负责幕后所有的初始化。最简单的wxPython程序应该像下面这样:
import wx
app=wx.App()
app.MainLoop()
因为没有任何用户可以交互的窗口,程序会立刻退出。
wx包中的方法都是以大写字母开头的,这和python的习惯是相反的。这样做的原因是这些方法名和基础的c++包wxWidgets中的方法名都是对应的。尽管没有正式的规则反对方法或者函数名以大写字母开头,但规范的做法是为类保留这样的名字。
窗口和组件
窗口(Window)也称为框架(Frame),它只是wx.Frame类的实例。
wx框架中的部件都是由它们的父部件作为构造函数的第一个参数创建的。如果正在创建一个单独的窗口,就不需要考虑父部件,使用None即可。而且在调用app.MainLoop()前需要调用窗口的Show方法——否则它会一直隐藏。
import wx
app=wx.App()
win=wx.Frame(None)
win.Show()
app.MainLoop()
执行结果:
增加按钮:
import wx
app=wx.App()
win=wx.Frame(None)
btn=wx.Button(win)
win.Show()
app.MainLoop()
执行结果:
标签、标题和位置
可以在创建部件的时候使用构造函数的label参数设定标签,用title设定标题。
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()
执行结果:
应该有两个按钮,实际只有一个是因为另一个被隐藏掉了。
调节按钮位置:
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))
contexts=wx.TextCtrl(win,pos=(5,35),size=(390,260),style=wx.TE_MULTILINE | wx.HSCROLL)
app.MainLoop()
执行结果:
更智能的布局
在调整窗口大小时,应该能保证窗口中的组件也会随之调整大小和位置。
在wx内进行布局的最简单方法是使用尺寸器(sizer),最容易使用的工具就是wx.BoxSizer。
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()
执行结果:
拉伸效果
事件处理
在GUI术语中,用户执行的动作叫做事件(event)。
让程序注意这些事件并作出反应。可以将函数绑定到所涉及的事件可能发生的组件上达到这个效果。当事件发生时,函数会被调用。利用部件的Bind方法可以将事件处理函数链接到给定的事件上。
完成了的程序
代码:
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 输入地址,点击open按钮,下面显示文件内容。
2 在下面区域编辑后点击save按钮关闭程序。
3 执行1步骤可看到刚才编辑的效果。
- python基础教程_学习笔记23:图形用户界面
- <<Python基础教程>>学习笔记 | 第12章 | 图形用户界面
- Python基础教程——12图形用户界面
- python基础教程_学习笔记3:列表
- python基础教程_学习笔记5:字符串
- python基础教程_学习笔记6:字典
- python基础教程_学习笔记9:抽象
- python基础教程_学习笔记10:异常
- Python学习笔记19:Python图形用户界面编程
- mac Python 图形用户界面学习
- java 图形用户界面 学习笔记
- python基础教程_学习笔记1:序列-1
- python基础教程_学习笔记2:序列-2
- python基础教程_学习笔记4:元组
- python基础教程_学习笔记7:条件、循环、其它语句
- python基础教程_学习笔记21:文件和素材
- python基础教程_学习笔记22:数据库支持
- python基础教程_学习笔记25:程序打包
- 循环遍历控件
- 为什么用Spring管理Hibernate
- 使用内部(com.android.internal)和隐藏(@hide)API ——[第三部分 定制android平台]
- PHP5.5.14+Apache2.4开发环境搭建指引
- 经纬财富:宜昌伦敦金、天通银欧盘做单策略
- python基础教程_学习笔记23:图形用户界面
- 学习入门
- mysql非安装版安装与配置使用
- laravel4.0 for xampp3.2.1 环境搭建
- GridControl详解(四)分组排序汇总
- UVa 1326 Jurassic Remains 解题报告(Meet-in-the-Middle)
- 由一个LED闪烁问题发现的MTK的LED driver中存在的问题
- VC和gcc在保证函数static变量线程安全性上的区别
- LibSVM 3.12的源码分析Svm-train.c