wxpython是什么_请问wxpython中 event传递的什么参数?
最近捣鼓Python,也就自然捣鼓上了wxPython。我曾经用过Qt和Gtk+写GUI,但几乎所有的Python书都告诉我说最好用的是wxPython,我没有尝试PyQt和PyGtk就开始研究wxPython了。在Qt和Gtk+之间我更喜欢Qt,因为它跨平台做得很好,而且商业化也不错。但wxWidget给人的感觉就完全不同了。
如果说wxWidgets相对于Qt有什么优势的话,大概就只有体积较小了。从开发效率上看,如果不和Python组合真的比不上Qt;从商业支持上看wxWidgets根本没有。不过和Python组合之后,开发效率大大提高,虽然用来做很正式的商业软件并不合适,但写写小程序还是很方便的。
现在切入正题,wxWidgets是一个事件驱动的体系,对于触发的事件,需要给它挂上相应的事件处理函数。在Python中这个函数的形式是这样的:
wx.Frame.Bind(self, event, handler, source=None, id=-1, id2=-1)
在一般使用时,我们基本上只会给定event、handler和source,event是事件的名称,handler是处理函数,source是事件的发生者,比如一个Button1被单击而发生了EVT_BUTTON事件,如果我们用self.OnButton1()来处理,会这么写:
self.Bind(wx.EVT_BUTTON, self.OnButton1, self.Button1)
这里self是一个Frame(wxPython中的窗体这样的东西),而Button1是放在这个Frame下面的一个Button,self.OnButton1就是事件处理函数。而wxPython定死了事件处理函数的形式:
def handler(self,event):...
事件处理函数只能接受两个参数,一个还是self。至于event,一看就知道是那个发生的事件。但这样就有一个问题了:如果我想批量创建一些按钮或者菜单键(我想这种事情是很普遍的),并且希望用同一个函数来处理它们,这个函数该怎样辨别是哪个按钮触发的事件呢?显然我们希望能多传一些参数。Qt实现这一点很容易,但wxWidgets就显得很棘手了。
我并没有用C++写过wxWidgets的程序——确切地讲是复制过一个example的,但是不知道是我英语太拆还是真的没有,我没能在wxWidgets的入门指南中找到编译指令,最后没法编译它。因此我不知道这个限制是不是C++也有,但是Python可以通过lambda来解决这个问题。以下的例子我用的是菜单。
首先我们建一个OnMenusClick函数:
def OnMenusClick(self, event, mark):....
这个函数多接收一个mark,绑定的时候,就不是把OnMenusClick直接绑定上去,而是传递一个被lambda包装过的函数。下面这个例子就会建立一堆Menu的按键,并给他们编号,OnMenusClick就可以接收到它们的编号了:
menu=wx.Menu()for i in range(0,N):btn=menu.Append(wx.NewId(), str(i))self.Bind(wx.EVT_MENU, lambda evt, mark=i : self.OnMenusClick(evt,mark) ,btn )
完成了!是不是感觉有点magic?关键在于这句lambda
lambda evt, mark=i : self.OnMenusClick(evt,mark)
这句实际上产生了只接收evt一个参数的函数,并将其传递给了self.OnMenusClick,这样就能够实现给事件处理函数传递更多参数的目的了。
def OnClick(evt,agrv):
print agrv
print evt
def func(evt,function):
function(evt)
func(2,lambda evt,argv=4:OnClick(evt,argv))
#!/usr/bin/env python
# !-*-coding:utf-8-*-
__author__ = 't'
import time
""" 过了某段时间案就执行 callback
"""
def func(t, callback, arg):
time.sleep(t)
callback(arg)
def test(name,other):
print "my name is %s" %name
print other
print "well done!"
# now, I want to pass some params to callback, how?
func(2,lambda name,other="asdf":test(name,other),"nihao")
wxpython是什么_请问wxpython中 event传递的什么参数?相关推荐
- java 中文参数_关于JAVA中URL传递中文参数的问题
今天在调用一个接口时,需要传递一个中文参数,结果获取不到数据,原因就在于中文传参的编码问题. 问题来源:URL url= new URL("http://XXX?OrganName=司法厅& ...
- 【学习笔记】MyBatis中接口中方法传递多个参数问题展示与解决
问题展示 编写Mapper接口 public interface ProductsDao {public Products findById(int i);public void deleteById ...
- wxpython收费吗_使用wxPython开发一个简单GUI应用
python用的时间不长,一般用来做字符串处理.简单测试的一些小程序.最近工作中需要做一个简单的GUI应用,使用麦克录音并存成wave文件.然后就想拿wxPython练练手. 一.概述 GUI开发采用 ...
- wxpython播放视频_使用wxpython显示网络摄像头视频闪烁
我是python的新手.我正在尝试编写一个运动检测应用程序.目前,我正在尝试将网络摄像头视频显示在屏幕上.当前的代码现在没有闪烁,但在任何调整大小后,闪烁将会回来.任何线索?另外,为什么没有self. ...
- wxpython 右键菜单_使用wxPython打造印象笔记(14)笔记本管理
上一篇文章中,我们用peewee对数据库建模并创建了数据库,然后成功的加载了默认笔记本.这篇文章将完成笔记本的管理功能,分为创建笔记本,修改笔记本,删除笔记本这三个功能.创建笔记本编辑笔记本删除笔记本 ...
- python中 什么意思_请问python中%代表什么意思?
婷婷同学_ 1.格式符例如:a = 'test'print 'it is a %s' %(a)打印的结果就是 it is a test2.单独看%,是一个运算符号,求余数.例如:求模运算,相当于mod ...
- divgrad怎么求_请问高等数学中div(grad u)中的div是什么意思?
DIV,即散度(divergence). 其运算公式为: 设某量场由 A(x,y,z) = P(x,y,z)i + Q(x.y,z)j + R(x,y,z)k 给出,其中 P.Q.R 具有一阶连续偏导 ...
- mysql 正序_请问mysql 中 怎么实现这种排序,按照状态排序正序,再按照开始时间排序正序,...
展开全部 有两个思路 1.按照各自的活动状态先排序,插入到临时表,最后再union all所有结32313133353236313431303231363533e58685e5aeb931333363 ...
- wxpython应用程序_用wxPython创建GUI应用程序展示NASA图片(第一部分)
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 在成长过程中,我时常认为探索宇宙空间是一件令人兴奋的事情,幻想那些未知的事物是相当有趣的.我也喜欢浏览异世 ...
最新文章
- jquery 设置asp:dropdownlist 选中项
- 设计模式常见面试真题详解
- 视频 | 为何我对小鹏NGP“半信半疑”
- linux下虚拟光驱,求助:谁有Linux下的虚拟光驱软件?
- Lock-Free / Lockless 相关术语
- Java笔记:final修饰符
- linux动态时钟探索
- qq刷屏代码可复制_QQ小程序「神奇字体」从注册到发布
- WES7 定制界面完整过程(去除所有windows标识)
- 求一堆点中的最大点集合(边界点)
- [FAQ06649] Latin输入法怎么默认勾选几种语言?
- UML for mac
- 【Solidity】7. 部件 - 深入理解Solidity
- 轻松摆好人像摄影姿势
- Python使用Plot库构图--详细教程
- 设置Sysctl conf用以提高Linux的性能 最完整的sysctl conf优化方案
- 算法题/青蛙跳台阶问题
- Android的WiFi子系统架构
- 5G+AI数字化智能工厂建设解决方案
- 螺旋打印二维数组(字节三面)