wxpython教材

上传人:jiups****uk12 文档编号:40099471 上传时间:2018-05-23 格式:DOCX 页数:30 大小:84.84KB
返回 下载 相关 举报
wxpython教材_第1页
第1页 / 共30页
wxpython教材_第2页
第2页 / 共30页
wxpython教材_第3页
第3页 / 共30页
wxpython教材_第4页
第4页 / 共30页
wxpython教材_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《wxpython教材》由会员分享,可在线阅读,更多相关《wxpython教材(30页珍藏版)》请在金锄头文库上搜索。

1、首先声明:本人还是个菜鸟,翻译只是为了学习,就当作记笔记了。水平有限, 错误和疏漏在所难免,希望各路高手能够给予指导。而且简单查了一下,好像 中文世界目前还没有完整的翻译 Getting Started with wxPython 的。wxPythonwxPython 入门入门第一个应用程序:第一个应用程序:”Hello,”Hello, World!”World!”按惯例,我们先来写一个 “Hello, World!” 小程序。这是代码:# -*- coding: utf-8 -*- “ http:/ “ import wxapp = wx.App(False) #创建 1 个 APP,禁用

2、stdout/stderr 重定向 frame = wx.Frame(None, wx.ID_ANY, “Hello, World!“) #这是一个顶层的 window frame.Show(True) #显示这个 frame app.MainLoop()12345678910解释:代码代码说明说明app = wx.App(False)每一个 wxPython 应用程序都是一个 wx.App 实例。对 于大多数的简单程序,直接实例化 wx.App 即可。但如 果你希望创建一个复杂的应用程序,那么可以对 wx.App class 做一些扩展。”False” 参数意味着 “不要把 stdout 和

3、 stderr 信息重定向到窗口”,当 然也可以不加 “False” 参数。frame = 完整的语法是 x.Frame(Parent, Id, Title)。在本例代码代码说明说明wx.Frame(None, wx.ID_ANY, “Hello, World!”)中,我们使用 “None” 来表示这个 frame 是顶层的框 架,没有父框架;使用 “wx.ID_ANY” 让 wxWidgets 来给我们挑选一个 ID。frame.Show(True)显示这个 Frameapp.MainLoop()运行这个应用程序Note1:Note1: 你还可以用 -1 来替代 wx.ID_ANY,-1 就

4、是默认值的意思。另外 wxWidgets 还提供了其它的标准 ID(v2.8)。 你也可以自定义一个 ID,但 Getting Started with wxPython 认为,没有理由那样做,用标准 ID 更好。 Note2:Note2: 实际上,wx.Frame 的完整语法是(详细的参数介绍):wx.Frame(Parent, ID, Title, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE, name=“frame“)1最后运行程序,我们可以看到类似这样的窗口: WindowsWind

5、ows 还是还是 Frames?Frames?当人们谈论 GUI 的时候,他们通常指的是 windows,menus 和 icons。那么自然 地,你可能会认为应该用 wx.Window 来代表屏幕上的一个 window。但实际上不 是这样的。wx.Window 是一个基础的 class,所有的可视化元素,例如 buttons, menus 等等,都起源于 wx.Window 类。而程序窗口则是一个 wx.Frame 。新手 经常把这 2 个概念搞混,需要特别留心。创建一个简单的记事本创建一个简单的记事本现在我们来写一个简单的记事本。在这个例子中,我们会用到几个组件,来理 解一些特性或功能,例

6、如事件(events)和回调(callbacks)。第第 1 1 步步首先,我们需要创建 1 个 frame,并且这个 frame 包含 1 个可编辑的文本框 (text box)。文本框需要用 wx.TextCtrl 来创建。默认情况下,文本框只能编 辑 1 行文字无论文字有多长,都不会换行。所以,我们需要用 wx.TE_MULTILINE 参数来允许多行编辑。# -*- coding: utf-8 -*-“ http:/ “ import wx class MainWindow(wx.Frame):“We simply derive a new class of Frame.“def _i

7、nit_(self, parent, title):wx.Frame._init_(self, parent, title = title, size = (200, 100)self.control = wx.TextCtrl(self, style = wx.TE_MULTILINE)self.Show(True)app = wx.App(False) frame = MainWindow(None, Small editor) app.MainLoop()123456789101112131415在这个例子中,我们生成一个 wx.Frame 的子类,并重写它的_init_ 方法。 我们用

8、 wx.TextCtrl 来声明一个简单的文本编辑器。注意,因为在 MyFrame._init_ 中已经运行了 self.Show() ,所以在创建 MyFrame 的实例 之后,就不用再调用 frame.Show() 了。添加一个菜单栏添加一个菜单栏 MenuBarMenuBar所有的应用程序都会有一个菜单栏,和一个状态栏。让我们来给这个记事本程 序添加一个:# -*- coding: utf-8 -*- “http:/ “ import wx class MainWindow(wx.Frame):“We simply derive a new class of Frame.“def _in

9、it_(self, parent, title):wx.Frame._init_(self, parent, title = title, size = (200, 100)self.control = wx.TextCtrl(self, style = wx.TE_MULTILINE)self.CreateStatusBar() #创建位于窗口的底部的状态栏#设置菜单filemenu = wx.Menu()#wx.ID_ABOUT 和 wx.ID_EXIT 是 wxWidgets 提供的标准 IDfilemenu.Append(wx.ID_ABOUT, u“关于“, u“关于程序的信息“)f

10、ilemenu.AppendSeparator()filemenu.Append(wx.ID_EXIT, u“退出“, u“终止应用程序“)#创建菜单栏menuBar = wx.MenuBar()menuBar.Append(filemenu, u“文件“)self.SetMenuBar(menuBar)self.Show(True)app = wx.App(False) frame = MainWindow(None, title = u“记事本“) app.MainLoop()1234567891011121314151617181920212223242526272829TIP:TIP:

11、 wx.ID_ABOUT 和 wx.ID_EXIT 是 wxWidgets 提供的标准 ID(查看全部标准 ID)。如果有一个现成的标准 ID,最好还是使用它,而不要自定义。因为这样 可以让 wxWidgets 知道,在不同的平台怎样去显示这个组件,使它看起来更美 观。事件处理事件处理 eventevent handlinghandling我们已经创建了 1 个记事本,虽然它有菜单,但是什么都做不了。我们希望点 击菜单之后,程序能够做出反应,例如退出,或者保存文件。在 Python 中,点 击菜单,点击按钮,输入文本,鼠标移动等等,都被称为事件 event,而对 event 做出反应,则被称为

12、 event handling。对不同的 event 做出不同的响应, 这是 GUI 程序的根本。我们可以使用 Bind() 方法,将 1 个对象 Object 和 1 个 时间 event 建立绑定关系。class MainWindow(wx.Frame):def _init_(self, parent, title):wx.Frame._init_(self,parent, title=title, size=(200,100).menuItem = filemenu.Append(wx.ID_ABOUT, “&About“,“ Information about this program

13、“)self.Bind(wx.EVT_MENU, self.OnAbout, menuItem)123456这段代码意味着:从现在开始,一旦用户点击了菜单中的 “About” 项目, self.OnAbout 就会被执行。Note:Note: Bind()之后,运行我的程序就提示编码错误,不能再使用中文了,所以 下面的代码示例都是全英文的。不知道这是不是 python(x,y)独有的问题。谁 能帮我解答一下?wx.EVT_MENU 指代“选择菜单中的项目”这个事件。wxWidgets 提供了很多的 事件,可以点这里查看不完整的列表,也可以使用下面的代码打印完整的列表。 所有的事件都是 wx.E

14、vent 的子类。import wxfor x in dir(wx):if x.startswith(EVT_):print x12345如果直接运行上面的 Bind 程序,会提示不存在 OnAbout 这个 attribute。还需 要在 Class 中声明 self.OnAbout 方法:def OnAbout(self, event):.12这里的 event 参数是 wx.Event 的子类的一个实例。当 event 发生的时候,method 就会被执行。默认情况下,这个 method 会处理 event,并且当 callback 完成之后,event 也会停止。但是在一些结构化的事

15、件处理器 event handlers 中,我们可以使用 event.Skip() 来跳过一个 event。例如def OnButtonClick(self, event):if (某种条件):做某事()else:event.Skip()def OnEvent(self, event):.12345678当一个点击按钮的事件发生时,OnButtonClick 会被调用。如果“某种条件” 为真,我们就会“做某事()”。否则我们就会让其它的 event handler 来处理 这个事件。现在来看看我们的程序:# -*- coding: utf-8 -*- “ http:/ “ import wx class MainWindow(wx.Frame):“We simply derive a new class of Frame.“def _init_(self, parent, title):wx.Frame._init_(self, parent, title = title, size = (600, 400)self.control = wx.TextCtrl(self, style = wx.TE_MULTILINE)self.CreateStatusBar()

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号