最近有用户在论坛上提问: “如何在Python多窗口之间进行数据传递?”。这是一个简单的老问题了,今天我们来讲一下在多窗口之间进行数据传递的方法: PyMe可以通过可视化操作为控件绑定用户变量,比如我们在“计算器”安例中,为顶部用于显示的Label,通过鼠标右键菜单为其绑定的变量当前数值、被运算数和运算符号。 有了这些变量后,在开发过程中,我们就可以通过Fun函数来随时获取和设置变量,以方便逻辑处理。(1)如果不是设计时绑定,需要手动在代码中为控件绑定一个用户变量:def AddUserData(uiName,elementName,dataName,datatype,datavalue,isMapToText = 0):
uiName:界面名称,这里如果是当前界面,保持uiName即可,如果是其它界面,要改为其它界面的名称。elementName:控件名称,指定要将变量绑定到目标界面的哪一个控件上。比如'Entry_1'。dataName:数据名称,指定要绑定的变量的名称,根据需要起个就好。datatype:变量的类型标识,有'int'、'float'、'string'、'list'、'dictionary'和自定义类型名称等,用于标识类型。如果不是基本类型,根据需要起个名也可。isMapToText:这个变量是设置是否映射到控件上,主要是对Entry或Label使用,让控件的文本显示为变量,改动时也一并改动,注意只允许有一个绑定变量可以被设置为映射到控件上。def SetUserData(uiName,elementName,dataName,datavalue):
def GetUserData(uiName,elementName,dataName):
参数与上面的AddUesrData相同,就不再赘述,只是在多个窗口界面开发中,要注意uiName和elementName指向正确的目标界面。
如果设计时绑定了变量,在代码中就不用再调用AddUserData来进行变量绑定,需要注意的是,控件被创建出来后,才能调用用户绑定变量,如果是多窗口界面,你可以把一些全局性变量直接绑定在启动或登录界面的Form_1上就会非常方便。在Fun函数库中有一个G_UserVarDict字典,你可以在代码编辑器中随时输入Fun.G_UserVarDict来进行访问:G_UserVarDict['Admin']='honghaier'
G_UserVarDict['FileList']=['a.txt','b.txt','c.txt']
它就是一个全局字典,非常灵活,多界面中也可以使用。第三种办法:在弹出、跳转或嵌入界面时通过界面参数进行传递。窗体之间的关系有弹出、跳转和嵌入三种,PyMe在事件操作时提供了对应这三种处理的按钮,最终都会生成相应的Fun函数。
1.弹出:呼出一个界面B,当前所在界面A不受影响。def CallUIDialog(uiName,topmost = 1,toolwindow = 1,grab_set = 1,wait_window = 1,animation='',params=None):
参数1:呼出的界面名称 ,
参数2:是否置最前,
参数3:是否有标题栏,
参数4:是否只有当前界面接收消息。
参数5:是否等待这个界面关闭才能使用其它界面。
参数6:动画类型fadein - 渐显动画,zoomin - 缩放动画。
参数7:传递的界面参数。
2.跳转:从当前界面A跳转到目标界面B,完成后,界面A消失。def GoToUIDialog(uiName,targetUIName,params=None):
参数1:当前界面名称
参数2:跳转到的界面名称
参数3:传递的界面参数。
3.嵌入:在指定界面的容器控件(面板、标签面板、分隔窗体)上嵌入其它界面。def LoadUIDialog(uiName,elementName,targetUIName,params=None,ignoreSameUI=True):
参数1:目标界面名称
参数2:目标控件名称
参数3:嵌入的界面名称
参数4:传递的界面参数。
参数5:是否忽略重复加载
可以看到,这三个函数都有一个可用于传递数据的界面参数,你可以在呼出、跳转、嵌入界面时,指定这个参数,将需要传递的参数赋值给它,这样在目标界面里,就可以通过Fun.GetUIParams来获取传递给当前界面的参数了。
为了更好的进行说明,在案例商店的"界面基础"分类下有一个免费工程"UIData",感兴趣的小伙伴可以下载学习。
怎么样,今天的技巧学会了么?如果有任何问题,欢迎留言,我将会耐心解答。