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()
- import wx
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的更多相关文章
- 《python基础教程(第二版)》学习笔记 文件和素材(第11章)
<python基础教程(第二版)>学习笔记 文件和素材(第11章) 打开文件:open(filename[,mode[,buffering]]) mode是读写文件的模式f=open(r' ...
- Python基础教程(第2版 修订版) pdf
Python基础教程(第2版 修订版) 目录 D11章快速改造:基础知识11.1安装Python11.1.1Windows11.1.2Linux和UNIX31.1.3苹果机(Macintosh)41. ...
- Python基础教程(第3版)PDF高清完整版免费下载|百度云盘
百度云盘:Python基础教程(第3版)PDF高清完整版免费下载 提取码:gkiy 内容简介 本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基 ...
- python基础教程(第二版)
开始学习python,根据Python基础教程,把里面相关的基础章节写成对应的.py文件 下面是github上的链接 python基础第1章基础 python基础第2章序列和元组 python基础第3 ...
- php 图形用户界面GUI 开发
php 图形用户界面GUI 开发 一.下载指定系统扩展 1 2 http://pecl.php.net/package/ui http://pecl.php.net/package/ui/2.0.0/ ...
- Python基础教程学习笔记:第一章 基础知识
Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...
- 《python基础教程(第二版)》学习笔记 基础部分(第1章)
<python基础教程(第二版)>学习笔记 基础部分(第1章)python常用的IDE:Windows: IDLE(gui), Eclipse+PyDev; Python(command ...
- Python 基础教程之包和类的用法
Python 基础教程之包和类的用法 建立一个文件夹filePackage 在filePackage 文件夹内创建 __init__.py 有了 __init__.py ,filePackage才算是 ...
- 学习参考《Python基础教程(第3版)》中文PDF+英文PDF+源代码
python基础教程ed3: 基础知识 列表和元组 字符串 字典 流程控制 抽象(参数 作用域 递归) 异常 魔术方法/特性/迭代器 模块/标准库 文件 GUI DB 网络编程 测试 扩展python ...
随机推荐
- 《SpringBoot揭秘 快速构建微服务体系》读后感(五)
应用日志和spring-boot-starter-logging 快速web应用开发与spring-boot-starter-web 1.项目结构层面的约定
- error: field has incomplete type
在头文件使用某一自定义的类的指针或引用时,只需要前置声明该类即可,然而如果该类中有静态成员时,必须包含该类的头文件,而不是使用前置声明.
- Javascript中的"\r\n"
我们知道 \r 代表的是 回车符(ACSII: 13 或0x0d), 也就是"硬回车" \n 代表的是 换行符(ACSII: 10 或 0x0a), 也就是 "软回车&q ...
- oracle查看表,索引,视图,存储过程的定义
通过 DBMS_METADATA 包 Oracle 的在线文档,对这个包有详细说明: DBMS_METADATA 通过该dbms_metadata包的get_ddl()方法,我们可以查看表,索引, ...
- HRBUST - 1214 NOIP2000提高组 方格取数(多线程dp)
方格取数 设有N*N的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放人数字0.如下图所示(见样例 ,黄色和蓝色分别为两次走的路线,其中绿色的格子为黄色和蓝色共同走过的 ...
- CentOS设置代理, yum, wget
/etc # vi yum.conf [main] cachedir=/var/cache/yum/basearch/releasever keepcache=0 debuglevel=2 logfi ...
- 计蒜课/UCloud 的安全秘钥(hash)
题目链接:https://nanti.jisuanke.com/t/15768 题意:中文题诶- 思路:直接hash就好了,当时zz了没想到... 代码: #include <iostream& ...
- uoj#311. 【UNR #2】积劳成疾(期望dp)
传送门 果然\(dp\)题就没咱啥事儿了 设\(f_{i,j}\)为长度为\(i\)的区间,所有元素的值不超过\(j\)的总的疲劳值 如果\(j\)没有出现过,那么\(f_{i,j}=f_{i,j-1 ...
- 洛谷P2939 [USACO09FEB]改造路Revamping Trails
题意翻译 约翰一共有\(N\))个牧场.由\(M\)条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场\(1\)出发到牧场\(N\)去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰 ...
- CC10:访问单个节点的删除
题目 实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点. 给定待删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true 解法 这道题并不难,主要是题目中这句话确定 ...