데이터베이스 상호 작용이 많은 다중 사용자 프레임 워크 VBA 프로젝트를 다른 것으로 마이그레이션하는 작업이 있습니다. 소프트웨어 설치를 요구할 수없는 것이어야합니다 (JRE와 .NET이 있으므로 질문) 나는 이것이 파이썬으로 할 수 있다고 믿는다 - wxPython은 프레임과 다른 컨트롤 (프레임 디자이너를 위해 보아 생성자를 사용한다.)을 다루고, 나는 또한 adodbapi를 통해 VBA가 사용하는 현재 데이터베이스와 연결했다. 나는 그걸 모두 제대로 맞추는 것을 빨아 먹는다.wxPython의 모듈/클래스 간 상호 작용
#!/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.py이 골격을 고려 일하다. 그러나 전체 데이터베이스 연결을 반복해서 복사/붙여 넣기 할 필요가 없기 때문에 모든 것을 한 곳에서 가져와 프레임의 코드에 액세스하려고했습니다. 내 생각으로는 하나의 myApp 객체가 있기 때문에 특히 연결 문자열이 sys.argv [1] 으로 사용 가능하므로 연결 객체를 포함 할 수 있습니다. 가능합니까? 그렇다면 어떻게하면 개체를 OnButton1 메서드 내부에서 참조 할 수 있습니까? 이 모든 것을 잘못 알아 낸 기회가 있습니다.이 경우 올바른 길에 대한 개요를 듣고 싶습니다. 내가 누락되었을 수 있다고 느껴지는 것은 아마도 데이터베이스 작업을위한 적절한 클래스 래퍼 일 것입니다.하지만 하나라도 만들면 모든 미래 프레임에서 해당 클래스의 인스턴스를 하나만 사용하고 싶습니다. - 심지어 myApp를 myFrame 내에서 가져옵니다. myApp는 myApp가 myFrame을 이미 가져온 것처럼 이상하게 보입니다. 두 가지 방법 모두 가능합니까?)하지만 로컬 변수에 대한 할당 유형에 관계없이 대부분 " '모듈'객체에는 속성이 없습니다."... (내게 스코프/모듈이 파이썬에서 작동하는 방법을 모르겠다)
시도, 나는 정말 내 문제를 해결할 것이라고 기대했지만 오류가 발생했습니다 : '모듈'개체에 'getApp'특성이 없습니다 - 그리고 나는 프레임에서 첫 번째 작업을 가져옵니다. – Yoriz
I를 얻을 수 wx.GetApp()를 사용할 수 – aPinchOfInsomnia
해당 국회 의사당 G는 오류가 소문자로 표시됩니다. 지. – Yoriz