我有一个任务,将具有很多od数据库交互的多用户框VBA项目迁移到不同的东西 - 因为这必须是不能要求安装软件的东西(所以JRE和.NET都不可用)我相信这可以用Python来完成 - wxPython覆盖了框架和不同的控件(我为它的框架设计器使用了boa构造函数),我还设法通过adodbapi与VBA正在使用的当前数据库连接。我只是想把它放在一起。考虑这个骨架:wxPython中的模块/类之间的交互
myApp.py
#!/usr/bin/env python
#Boa:App:BoaApp
import wx
import myFrame
modules ={u'myFrame': [1, 'Main frame of Application', u'myFrame.py']}
class BoaApp(wx.App):
def OnInit(self):
# here I think I'd see something like, say:
# self.main.cnnObject = adodbapi.connect (some proper connection string)
self.main = myFrame.create(None)
self.main.Show()
self.SetTopWindow(self.main)
return True
def main():
application = BoaApp(0)
application.MainLoop()
if __name__ == '__main__':
main()
myFrame.py
#Boa:Frame:myFrame
import wx
def create(parent):
return myFrame(parent)
[wxID_MYFRAME, wxID_MYFRAMEBUTTON1,
] = [wx.NewId() for _init_ctrls in range(2)]
class myFrame(wx.Frame):
def _init_ctrls(self, prnt):
# generated method, don't edit
wx.Frame.__init__(self, id=wxID_MYFRAME, name='myFrame', parent=prnt,
pos=wx.Point(710, 329), size=wx.Size(400, 250),
style=wx.DEFAULT_FRAME_STYLE, title='MainFrame')
self.SetClientSize(wx.Size(392, 223))
self.button1 = wx.Button(id=wxID_MYFRAMEBUTTON1,
label='FETCH cnnObject', name='button1', parent=self,
pos=wx.Point(0, 144), size=wx.Size(392, 79), style=0)
self.button1.Bind(wx.EVT_BUTTON, self.OnButton1,
id=wxID_MYFRAMEBUTTON1)
def __init__(self, parent):
self._init_ctrls(parent)
def OnButton1(self, event):
event.Skip()
# here and in other events in other frames I would like to retrieve
# that cnnObject to use for queries
添加吨的控制,事件,从这个打开连续帧而旁边似乎来上班。但是,为了不必一遍又一遍地复制/粘贴整个数据库连接的东西,我希望将它全部放在一个地方,只需从框架中访问该代码即可。 我的一般想法是,因为只有一个myApp对象,它可能包含连接对象,尤其是因为连接字符串将作为sys.argv [1] 可用?如果是这样,我将如何从OnButton1方法中引用应用程序对象?我也有机会发现所有的错误,在这种情况下,我希望听到'正确的方式'的轮廓。 我觉得我可能会错过的可能是适合这些数据库操作的类包装,但即使我做了一个,我仍然希望在我所有的未来框架中只有一个该类的实例,但我可以' t甚至可以通过应用程序实例来实现 - 我在myFrame中导入myApp(本身看起来很奇怪,因为myApp已经导入了myFrame,所以两种方式都可以?),但无论我尝试使用哪种类型的本地变量赋值, “'模块'对象没有属性”...(这让我觉得我可能没有得到如何在Python范围/模块工作)
可以使用wx.GetApp()来获取应用程序 – Yoriz
我尝试,我真的希望这会解决我的问题,但我得到一个错误:'模块'对象没有属性'getApp' - 我DID有导入wx第一件事在框架 – aPinchOfInsomnia
它的国会大厦G,错误显示一个小写G。 wx.GetApp()不是wx.getApp() – Yoriz