python,wxpython的不同类间的数据传递问题

示范代码如下,我的目的是将按钮获取的数据传递出去,传递到框架外部的某个函数或者类里面做其他的用处,我现在只能在框架内部调用这个数据,在外面如果调ADD这个函数就会告诉我输... 示范代码如下,我的目的是将按钮获取的数据传递出去,传递到框架外部的某个函数或者类里面做其他的用处,我现在只能在框架内部调用这个数据,在外面如果调ADD这个函数就会告诉我输入存在问题,但是Add的输入有一个是event,我就不知道怎么解决了。多谢各位大大解答。

#-*- coding:utf-8 -*-
import wx
class Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,parent = None,id = -1,pos = (150,150),size = (500,400))
panel = wx.Panel(self)
button1 = wx.Button(panel,label = u'按钮1',pos = (100,200),size = (50,40))
button2 = wx.Button(panel,label = u'按钮2',pos = (300,200),size = (50,40))
self.Bind(wx.EVT_BUTTON,self.Add,button1)
self.Bind(wx.EVT_BUTTON,self.OutPut,button2)
self.i = 0
pass

def Add(self,event):
self.i = self.i + 1
print self.i
return self.i

def OutPut(self,event):
pass#怎么去通过按钮2将按钮1按下次数传递到函数shownum中并打印出来。

def shownum():
print''

if __name__ == '__main__':
app = wx.App()
frame = Frame()
frame.Show()
app.MainLoop()
示范程序中我想的时通过按下按钮2,就在外部的函数shownum中打印出来按钮1按下的次数,由于这个只是个示范程序,我明白可以在frame中通过按钮2打印出来按钮1的次数,但我想要的时将数据传递出去,这个只是个示范程序。
目的是如何去在shownum()中打印出来按钮1的次数,不要再OutPut中打印按钮1的次数。多谢!
展开
 我来答
bdwisyou7d
推荐于2016-05-11 · TA获得超过1.3万个赞
知道大有可为答主
回答量:3774
采纳率:81%
帮助的人:1052万
展开全部
你问的是几个问题。ADD是wx frame的内部处理函数,不能从外部直接调用。具体原因,你可以查一下GUI的原理。GUI是一个事件驱动的封闭体系,是一个服务。你直接调用就破坏了人家的消息处理机制。所以是不允许的。

第二个问题就变量传递,在python里有多种办法,最简单的就是用global 修饰一个变量,这样就可以在不同的线程,不同的模块间直接使用。具体使用办法,你看一下帮助。 需要在使用前用global 指定要全局化的变量

第三个问题。点击按钮触发事件。这样的事情,直接在按钮事件处理函数里处理就可以了。不用调用外部函数。没有理由,也没有必要。

如果你希望让系统容易阅读一些,就把GUI的构建代码,事件处理代码,数据描述代码,业务逻辑代码分别写在不同的模块里。这就是典型的MVC模型。

还有一个简单的办法。shownum这个函数的入口,加一个参数,将frame传递进去。这样shownum就可以直接访问frame类的所有内置公开变量。打印更不在话下。

最后附带说明一下, 你的函数命名,变量命名一定要有意思。不要再用“按钮1”, “按钮2”, output这样的命名。 你的shownum命名就不错。
追问
多谢大神,我的实际程序是通过一个按钮收集一组文件路径,建立一个字典,然后将这个字典传递到另外一个计算程序中,计算路径所指向文件的值,由于那个程序很复杂就没有贴上来了。
开始我也试过global,可能自己理解不够充分,没有成功。我再去认真看看global如何实战这个功能。大大有技术博客吗,我去看看学习。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式